2016-12-05 45 views
2

我的应用程序依赖于库foolib,图书馆foolib对lodash的依赖,并通过var _ = require('lodash')Lodash需要subdependency时本身意外注入到全球

需要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._ = _; 

添加一个调试器成为在调试器触发条件结果身体,但是造成的,如果要进入现在分支条件返回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该项条件是真

回答