在node.js中全局导入包

时间:2018-07-20 23:30:03

标签: javascript node.js

我的node.js应用程序中有不同的模块,最终我导入了相同的包(例如npm时刻)。

我想知道是否有更好的方法可以在一个位置上导入所有依赖项,并将其像全局导入一样使用,从而使每个模块都不需要单独的npm模块导入导入

1 个答案:

答案 0 :(得分:1)

出于以下几个原因,模块被设计到node.js的核心中:

  1. 为每个模块创建一个单独的变量名称空间,这样就不会发生变量命名冲突。
  2. 使代码重用并共享内置在node.js核心中的内容(只需查看NPM中庞大的事物库以了解其工作原理)。
  3. 增加每个功能块的独立性,使事情更可独立测试,简化整个模块的单元测试的创建等。
  4. 使代码之间的依赖关系清晰明了(陈述而不是隐式)。

要获得这些优势,除了一些核心内置功能之外,您无需依赖全局名称空间。并且,您要求每个模块以声明方式导入其所需的其他模块。

这样做的代价是在每个模块的顶部添加了一些所需的所有东西,为此增加了一些额外的样板。这些模块被缓存,因此实​​际上并没有太多的运行时开销,而是每个模块中的一些重复编码。因此,如果您需要访问模块中10个模块中的力矩模块,则可以将其分别导入10个模块中。尽管这似乎是多余的,并且您应该避免某些事情(来自非模块领域),但获得模块的上述所有优势的成本却很小。

这确实是您逐渐习惯于node.js开发的东西。每个模块只是从导入其依赖的其他模块开始。是的,有一些重复的代码,但这就是您获得模块化的其他优点的方法。

一旦开始在全局名称空间中填充东西以防止在模块开始时进行一些键入操作,就会开始创建隐式(非声明性)依赖项。您使代码更难以在其他项目中共享或重用,并打开了变量命名冲突的可能性(试想一下,如果您从NPM使用的10件事也都做到了这一点,或者想像一下,您的项目中有10个人正在这样做)。

因此,将其视为刷牙。每次都很难做,但是如果您不这样做,那您就要付钱给吹笛者。只需导入每个模块中所需的外部模块即可。