当子相关性需要时,Lodash意外地将自己注入全局

时间:2016-12-05 18:48:34

标签: webpack lodash

我的应用程序取决于库foolib,库foolib依赖于lodash,需要通过var _ = require('lodash')

要求foolib导致lodash将自己附加到窗口

我发现这是由于这个原因:

https://github.com/lodash/lodash/blob/45785a282442399cfca829aea496104003f773e2/dist/lodash.js#L17041-L17046

  // 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进行构建,因此definedefine.amd的条件似乎出乎意料

1 个答案:

答案 0 :(得分:6)

找到解决方案:
https://github.com/webpack/webpack/issues/138#issuecomment-160638284

module: {
    noParse: /node_modules\/lodash\/lodash\.js/,
}

添加到webpack配置并且问题已解决