为什么不在命名空间变量中向窗口或全局添加类?

时间:2017-11-13 08:44:09

标签: javascript node.js webpack module es6-class

我正在使用webpack来传输/捆绑/等我的js文件。我使用导入/导出语法(与require和export.module的CommonJS方式相反)。这意味着如果我需要在特定脚本的上下文中使用它们,我需要多次导入它的每个类及其所有子类。

问题:

即使js本身支持类,为什么我们需要一直导入它们?如果(并且我只在课堂上发言)它们可用于所有范围,那会不会更容易?

编辑:为了避免污染全局范围,可以执行类似global.myLibs的操作并完成该问题。我个人在我的课程前面添加了一些独特的东西,但这种方法甚至可以用于那些我认为不会的东西。

例如:

window.myClasses可以作为我所有课程的容器。我来自一个iOS背景,其中所有的主要"捆绑",在java中我认为这将是一个"包"每个人都可以使用。重新导入类本身似乎没有任何用途。

见这里: Why do i need to import modules everytime in webpack bundle?

在这里:Bundling js files with webpack class undefined

1 个答案:

答案 0 :(得分:0)

在全局范围内添加内容可能会导致命名冲突。如果您创建了一个名为Node的类,通过window.Node = Node将其添加到全局范围会怎样?您将丢失对浏览器的全局Node对象的引用。

您可以争辩说,您永远不会使用已经用于全局对象的名称。但现在,如果在一年左右的时间内,新的对象被添加到规范中,并且与您的一个对象同名,并且您想要将它与您自己的对象一起使用?您必须做出选择,或重命名您自己的对象。这不是未来的证明。

在使用它的每个模块中导入相同的模块是最佳做法。因为通过这样做,您永远不会污染全球范围。不要担心它会在你的最终捆绑中导入这个模块的代码n次。 Webpack只导入一次,然后在每次导入时使用对模块的引用。

请参阅以下资源: