Javascript webpack:在构建中实现zeptojs
我正试图将ZeptoJS添加到我的Web包供应商包中,但我不断收到一个错误,说明: 未捕获的TypeError:无法读取未定义(…)的属性“createElement” 我检查了zepto.js源代码,它在这行抱怨:Javascript webpack:在构建中实现zeptojs,javascript,jquery,webpack,zepto,Javascript,Jquery,Webpack,Zepto,我正试图将ZeptoJS添加到我的Web包供应商包中,但我不断收到一个错误,说明: 未捕获的TypeError:无法读取未定义(…)的属性“createElement” 我检查了zepto.js源代码,它在这行抱怨: table = document.createElement('table') <-- 'document' is undefined 在加载事件中加载vendor.js 以前是否有人遇到过此问题,并就如何使其正常工作提供了建议?谢谢。使用ZeptoJS之前,任何使用Ze
table = document.createElement('table') <-- 'document' is undefined
在加载事件中加载vendor.js
以前是否有人遇到过此问题,并就如何使其正常工作提供了建议?谢谢。使用ZeptoJS之前,任何使用ZeptoJS的文件都应该有一行如下所示:
// ES6 module syntax
import $ from 'webpack-zepto';
$.zeptoMethod();
或者这个:
// ES6 module syntax with direct reference to ZeptoJS file
import 'path/to/zepto.min.js' as $;
$.zeptoMethod();
它也可能看起来像:
// AMD module syntax
require(['zepto'], function ($) {
$.zeptoMethod()
});
当webpack看到上述代码时,它知道应该将zepto.js添加到包中
请注意,webpack.conf.js不需要知道关于ZeptoJS的任何信息,特别是。如果您希望webpack对ZeptoJS进行特殊处理(比如加载zepto.min.js而不是zepto.js,甚至加载jQuery而不是ZeptoJS!),ZeptoJS可能会出现在webpack.conf.js中
也可以通过将ZeptoJS包含在HTML文件的标记中并引用
$
(全局窗口。$
)来使用ZeptoJS。但是,如果以这种方式使用ZepotoJS,则Web包无法知道ZeptoJS应该包含在捆绑包中
如果由于某种原因ZeptoJS不支持作为模块加载,那么包装起来很简单。(并且已经完成:)问题在于Zepto本身: 为防止作用域泄漏,browserify/webpack将模块包装在函数中。
此
将成为该函数的作用域,而不是窗口
这个问题应该在合并时解决
同时,为了防止发生此问题,您可以使用:
您在代码中的何处/如何包含zepto?我认为webpack配置决定了模块的加载方式,但不应该实际加载模块本身。而且,在大多数情况下,webpack配置不应该只需要zepto的特殊设置。(源文件中应该有一行需要zepto,如:
require('zepto'))
或导入'zepto'
)页面加载后执行zepto。是的,但必须有一个使用zepto的文件。哪个文件,以及它如何表示“我需要zepto”?
// AMD module syntax
require(['zepto'], function ($) {
$.zeptoMethod()
});
// In your Webpack config
module: {
rules: [{
test: require.resolve('zepto'),
use: {
loader: 'imports-loader',
options: 'this=>window',
},
}],
}