webpack 是如何解决全球污染的?
how does webpack solve global polution?
假设我有 3 个函数。如果我将它们一个接一个地写下来,一个接一个地写,它们都将暴露在全局命名空间中,从而导致全局污染。所以一种方法似乎如下。
var test;
(function() {
test.funct1 = function(){
}
test.funct2 = function(){
}
test.funct3 = function(){
}
})
现在,我们减少了问题,因为函数没有放入全局命名空间。我们可以说,它们仍然是,但不完全是。 test
将放在全局 namespace
上,它上面有所有其他功能。
问题1)现在问题依旧,如果有人或者某个图书馆有test
,问题是我的test
和图书馆的test
会发生碰撞,貌似太糟糕了。人们如何在没有任何 library/framework 或其他任何东西(没有 webpack)的情况下解决这个问题?
问题2)好的,那么webpack确实解决了上面的问题。在 webpack 中,每个文件都是模块。这是可以理解的,但是,一个很好的例子会很棒,有些东西仍然需要放在全球范围内。我会很感激一个很好的例子。
Now, the problem still exists, if someone or some library has test , the problem is my test and the library's test will be collided, which seems too bad. How do people solve this without any library/framework or whatever (without webpack) ?
只在必要的范围内声明test
;不要让它全球化。例如,您可以:
<script>
(() => {
const test = {
funct1() {
// ...
}
// ...
};
// do stuff with test
})();
(() => {
const test = {
OTHER_METHOD() {
// ...
}
// ...
};
// do stuff with test
})();
</script>
这样,test
都不是全局的;它们都包含在自己的 IIFE 中,所有对特定 test
的使用都将在该 IIFE 中。
some stuff still have to be put on global scope
像 Webpack 这样的模块系统的全部意义在于 避免污染 全局对象;如果您的代码结构合理,则不需要它。但是如果你不得不,只需引用全局对象并分配给它的一个属性,例如:
// someModule.js
window.SomethingGlobal = {
// stuff
};
这不是 Webpack 特有的; ES6 模块也可以使用同样的方法来减少全球污染
假设我有 3 个函数。如果我将它们一个接一个地写下来,一个接一个地写,它们都将暴露在全局命名空间中,从而导致全局污染。所以一种方法似乎如下。
var test;
(function() {
test.funct1 = function(){
}
test.funct2 = function(){
}
test.funct3 = function(){
}
})
现在,我们减少了问题,因为函数没有放入全局命名空间。我们可以说,它们仍然是,但不完全是。 test
将放在全局 namespace
上,它上面有所有其他功能。
问题1)现在问题依旧,如果有人或者某个图书馆有test
,问题是我的test
和图书馆的test
会发生碰撞,貌似太糟糕了。人们如何在没有任何 library/framework 或其他任何东西(没有 webpack)的情况下解决这个问题?
问题2)好的,那么webpack确实解决了上面的问题。在 webpack 中,每个文件都是模块。这是可以理解的,但是,一个很好的例子会很棒,有些东西仍然需要放在全球范围内。我会很感激一个很好的例子。
Now, the problem still exists, if someone or some library has test , the problem is my test and the library's test will be collided, which seems too bad. How do people solve this without any library/framework or whatever (without webpack) ?
只在必要的范围内声明test
;不要让它全球化。例如,您可以:
<script>
(() => {
const test = {
funct1() {
// ...
}
// ...
};
// do stuff with test
})();
(() => {
const test = {
OTHER_METHOD() {
// ...
}
// ...
};
// do stuff with test
})();
</script>
这样,test
都不是全局的;它们都包含在自己的 IIFE 中,所有对特定 test
的使用都将在该 IIFE 中。
some stuff still have to be put on global scope
像 Webpack 这样的模块系统的全部意义在于 避免污染 全局对象;如果您的代码结构合理,则不需要它。但是如果你不得不,只需引用全局对象并分配给它的一个属性,例如:
// someModule.js
window.SomethingGlobal = {
// stuff
};
这不是 Webpack 特有的; ES6 模块也可以使用同样的方法来减少全球污染