我的应用程序取决于库foolib
,库foolib
依赖于lodash,需要通过var _ = require('lodash')
要求foolib
导致lodash将自己附加到窗口
我发现这是由于这个原因:
// Some AMD build optimizers, like r.js, check for condition patterns like:
if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {
// Expose Lodash on the global object to prevent errors when Lodash is
// loaded by a script tag in the presence of an AMD loader.
// See http://requirejs.org/docs/errors.html#mismatch for more details.
// Use `_.noConflict` to remove Lodash from the global object.
root._ = _;
在调试器触发中将调试器添加到条件结果体中,但导致if分支输入的条件现在返回false
在调试器之前添加控制台日志以注销define
的值,表明它由webpack:///(webpack)/buildin/amd-define.js?0bba
定义,内容为
module.exports = function() { throw new Error("define cannot be used indirect"); };
/*****************
** WEBPACK FOOTER
** (webpack)/buildin/amd-define.js
** module id = 875
** module chunks = 2
**/
由于我正在使用webpack进行构建,因此define
和define.amd
的条件似乎出乎意料
答案 0 :(得分:6)
找到解决方案:
https://github.com/webpack/webpack/issues/138#issuecomment-160638284
module: {
noParse: /node_modules\/lodash\/lodash\.js/,
}
添加到webpack配置并且问题已解决