gpt4 book ai didi

javascript - Fabric.js 与 Typescript 和 Webpack : Canvas is not a constructor

转载 作者:搜寻专家 更新时间:2023-10-30 20:42:54 24 4
gpt4 key购买 nike

我正在尝试将 fabric.js 与 Typescript 和 Webpack 一起使用,除了 Laravel 5.4 应用程序中的一些其他模块,这些模块在浏览器中运行良好。 @types/fabric 已安装并且 Typescript 行为正确。 Typescript 和 Webpack 的新手我尝试了一些变体但没有成功。

问题

result.js:198 Uncaught TypeError: __WEBPACK_IMPORTED_MODULE_1_fabric___default.a.Canvas is not a constructor

变体 A

code.ts

import fabric from "fabric";
const canvas = new fabric.Canvas('my-canvas');

result.js

var canvas = new __WEBPACK_IMPORTED_MODULE_1_fabric__default.a.Canvas('my-canvas');

WEBPACK_IMPORTED_MODULE_1_fabric__default 需要 WEBPACK_IMPORTED_MODULE_1_fabric,这是一个以 fabric 作为键的对象。

const canvas = new fabric.fabric.Canvas('my-canvas');

适用于 Webpack 但不符合类型检查。

变体 B

code.ts

import * as fabric from "fabric";
const canvas = new fabric.Canvas('my-canvas');

result.js

var canvas = new __WEBPACK_IMPORTED_MODULE_1_fabric__["Canvas"]('my-canvas');

WEBPACK_IMPORTED_MODULE_1_fabric 包含一个以 fabric 作为键的对象,因此情况类似于变体 A。

变体 C

code.ts

import {Canvas} from "fabric";
const canvas = new Canvas('my-canvas');

result.js

var canvas = new __WEBPACK_IMPORTED_MODULE_1_fabric__["Canvas"]('my-canvas');

最后它与变体 B 相同。

webpack.mix.js 的摘录

   .webpackConfig({
module: {
rules: [
{
test: /\.js$/,
loader: 'babel-loader',
include: [
path.resolve('app/public/js'),
path.resolve('node_modules/countable')
],
},
{
test: /\.vue$/,
loader: 'vue-loader',
exclude: [
path.resolve('resources/assets/ts/components')
],
options: {
loaders: {
'scss': 'vue-style-loader!css-loader!sass-loader',
'sass': 'vue-style-loader!css-loader!sass-loader?indentedSyntax',
}
}
},
{
test: /\.tsx?$/,
loader: 'ts-loader',
exclude: /node_modules/,
options: {
appendTsSuffixTo: [/\.vue$/],
}
},
]
},
plugins: [
new webpack.ProvidePlugin({
'_': 'lodash',
'$': 'jquery',
'jQuery': 'jquery',
'window.jQuery': 'jquery',
}),
new LiveReloadPlugin()
],
resolve: {
extensions: ['.js', '.ts', '.vue', '.jsx', '.tsx', '.vuex'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
}
}

问题似乎出在 Webpack 和/或 babel-loader 没有考虑结构命名空间。

所以问题是,是否有任何方法可以告诉 Webpack 以直接引用 fabric(或此类导入库)的方式处理此导入,或者以 Webpack 也满意的方式将其导入 Typescript ?

最佳答案

这对我有用:

import 'fabric' ;
declare let fabric: any;

var c = new fabric.Canvas('myCanvas') ;

我在 TypeScript 2.5.3 和 webpack 3.5.1 上使用@types/fabric 1.5.26

关于javascript - Fabric.js 与 Typescript 和 Webpack : Canvas is not a constructor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46032866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com