【发布时间】:2019-03-26 05:03:49
【问题描述】:
场景
所以,我已经用 npm 初始化了一个 Node 项目。我已经相应地设置了我的 package.json。我正在使用打字稿,所以我也设置了 tsconfig.json。
我有一些依赖项(npm 包)需要在项目的多个文件中多次使用。 index.ts 是我项目的根。我也可以在 index.js 和其他文件中导入这些库。
问题
有没有办法在项目中只包含或导入这些库一次,这样我就可以在项目的任何文件中使用它们,而不必在任何地方导入任何东西。
我尝试搜索各种方法来做到这一点 - CommonJS 模块语法、NodeJS 模块语法、全局模块——但没有一个能提供我想要的方式。
前-
我得到的大部分答案或解决方案都是这样的
-
通过单个文件导出所有库
import abc from 'abc'; import xyz from 'xyz'; module.exports = { abc, xyz }; -
在其他文件中使用这些库,例如
import modules from 'src/modules.ts' var wantSome = modules.abc.getSome();
但是,这仍然需要导入模块文件并像 modules.abc 一样访问它。
我们有什么方法可以在整个项目中使这些导入在全球范围内可用。
附: - 这个场景有点类似于 Angular 2+ 中的 ngModules,我们可以在 ngModules 中导入我们想要的任何内容,然后该模块下的所有组件都可以使用它。
【问题讨论】:
-
你展示的例子是你想要的最好的。为什么你可以那样使用它?另一种选择是将它们存储在全局变量中,但这不合适。或者更好的是,只需在需要时导入每个文件。如果您已经导入了库,Nodejs 不会重新导入它,它将使用缓存的值
-
我不想使用它,因为我看到 Angular 的 ngModule 具有我需要的功能。因此,必须有某种方法在普通节点应用程序中使用 CommonJS 模块模式或类似的东西来实现它!由于这种方式,我已经提到了开销。我想消除它!
-
可能有一个这样的库,但对于你的 nodejs 应用来说这是一个错误的设计
-
有什么理由要使用 import 如何在 Angular 中使用它?喜欢表演吗?
-
易于使用!就这样。只需指定您要在项目中使用的内容,不用担心将其导入到具有相同导入语句的大量文件中!
标签: node.js typescript node-modules commonjs ng-modules