默认情况下,Webpack包含AMDPlugin,因此如果模块在CommonJS之前检查AMD,则将使用该模块定义。
if (typeof define === 'function' && define.amd) {
define([], factory)
} else if (typeof exports === 'object') {
exports.foo = factory();
}
我想完全忽略AMD。有没有办法在webpack中做到这一点?
答案 0 :(得分:19)
可以使用imports-loader
解决在使用CommonJS之前,有许多模块会检查define函数。由于webpack能够兼顾两者,因此在这种情况下它们默认为AMD,如果实现是古怪的,这可能是一个问题。 然后,您可以通过编写
轻松禁用AMD路径
imports?define=>false
简单地做
require('imports?define=>false!myjsfile.js')
或强> 更好的方法是在webpack.config.js中添加一个加载器
loaders: [ { test: /myjsfile.js/, loader: 'imports?define=>false'} ]
答案 1 :(得分:1)
您还可以在规则中添加以下内容以禁用AMD(webpack 2 +):
module: {
rules: [
{ parser: { amd: false } }
]
}
答案 2 :(得分:0)
另请考虑script-loader
末尾提到的Shimming documentation:
script-loader 评估全局上下文中的代码,类似于 通过脚本标记包含。在这种模式下,每个普通的库都应该 工作。 require,module等未定义。