【发布时间】:2018-03-15 15:07:41
【问题描述】:
我正在关注Webpack guide。我像这样导入lodash:
import _ from 'lodash';
它按预期工作,但有一些不清楚的地方。 Guide 声称在这种情况下,全局范围不会受到 lodash 的影响,但事实并非如此。
在此设置中,index.js 明确要求 lodash 存在,并将其绑定为 _ (无全局范围污染)。通过说明模块需要哪些依赖项,webpack 可以使用这些信息来构建依赖关系图。然后它使用该图生成一个优化的包,其中脚本将以正确的顺序执行。
在 Chrome 的控制台中我仍然可以访问 lodash:
console.log(_, _.join, window._.join);
所有这些工作,所以很明显 lodash 实际上污染了全局范围。
是因为 lodash 确实明确地将自己分配给 window 还是其他原因?
【问题讨论】:
-
要么你将它分配给窗口,要么 lodash 做到了。这可能取决于您如何捆绑代码。我不了解 lodash 的内部结构,但是如果它可以识别模块加载机制,很多库会尝试避免附加到全局范围。如果不能,它将自己附加到全局范围。
-
我认为 lodash 做到了。例如,如果我这样做
import Lodash from 'lodash';,Lodash不在全局范围内,而_仍然在。我想知道他们为什么使用如此不幸的例子。 -
我同意。出于同样的原因,我感到困惑
标签: javascript webpack lodash