Tom*_*Tom 5 javascript fabricjs
在我的网站上,我不想捆绑而是直接使用 ES6 模块(适用于观众)
我尝试导入fabric.js
import {fabric} from "../node_modules/fabric/dist/fabric.js"; 就像我捆绑时所做的一样(对于捆绑来说,它工作正常)。
但是当我启动网站时
“未捕获的语法错误:请求的模块 '../node_modules/fabric/dist/fabric.js' 不提供名为 'fabric' 的导出”
如果我将上述更改为
import * as FAB from "../node_modules/fabric/dist/fabric.js";
我得到
未捕获的类型错误:无法读取 fabric.js:3224 处未定义的属性“fabric”
关于如何将结构直接用作 ES6 模块而不捆绑的任何想法?不用说,我在使用 Chrome 76.0.3809.132 时导入的其他模块没有这个问题
升级到fabric 3.4 无济于事。让我在这里粘贴我的整个代码: html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script type="module" src="./start.js"></script>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
以及我从中删除所有其他内容的 JS
import fabric from '../node_modules/fabric/dist/fabric.min.js';
还是一样的错误
未捕获的语法错误:请求的模块“../node_modules/fabric/dist/fabric.min.js”不提供名为“default”的导出
Fabric.js 的编写方式无法与 ES6 模块导入一起使用。这是因为 Fabric 依赖this于浏览器环境中的引用window,例如,当它使用 IIFE 向对象添加属性时,fabric如下所示:
(function(global) {
var fabric = global.fabric || (global.fabric = { }),
// ...
fabric.something = somethingElse
})(typeof exports !== 'undefined' ? exports : this);
Run Code Online (Sandbox Code Playgroud)
通常,this将作为对 的引用传递window,但当脚本作为模块加载时则不会传递(MDN 在此处以及其他地方提到了它)。
这就是为什么即使你通过正确导入它
import fabric from '../node_modules/fabric/dist/fabric.js'
Run Code Online (Sandbox Code Playgroud)
你会得到类似的错误
Uncaught TypeError: Cannot read property 'fabric' of undefined
Run Code Online (Sandbox Code Playgroud)
除非您想亲自动手修补库源代码,否则最好将结构加载到单独的非模块脚本标记中。
| 归档时间: |
|
| 查看次数: |
714 次 |
| 最近记录: |