为整个项目一次导入节点模块

时间:2018-10-22 07:08:29

标签: node.js typescript node-modules commonjs ng-modules

场景

因此,我已经用npm初始化了一个Node项目。我已经相应地设置了我的package.json。我正在使用打字稿,所以我还设置了tsconfig.json。

我有一些依赖项(npm软件包),需要在项目的多个文件中多次使用。 index.ts是我项目的根源。我也可以将这些库导入index.js和其他文件中。

问题

有没有办法只在项目中包含或导入这些库一次,这样我就可以在项目的任何文件中使用它们,而不必在任何地方导入任何东西。

我尝试使用以下方法搜索实现此目的的各种方法: CommonJS模块语法,NodeJS模块语法,全局模块-但它们都无法提供我想要的方式。

对于Ex-

我得到的大多数答案或解决方案都是这样

  • 通过一个文件导出所有库

    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这样来访问它。

我们有什么办法可以在整个项目中使这些导入在全球范围内可用。

P.S。 -这种情况与Angular 2+中的ngModules有点相似,在这里我们可以在ngModules内部导入所需的任何内容,然后该模块下的所有组件都可以使用它。

3 个答案:

答案 0 :(得分:3)

从长远来看,这样做会导致各种各样的问题。

  • 最终,您将得到一个包含所有导出内容的整体文件,而该文件将难以维护
  • 如果您决定对代码进行模块化,则会更加困难,因为您将不会明确知道文件使用的模块
  • 如果您能够包括仅使用没有参考的模块,代码的清晰度将受到损害
  • 名称可能会发生冲突

我相信您最好进入节点的是在一个模块中声明所有包含的内容,然后在自己的文件中进行分解。

import abc from 'abc';
import xyz from 'xyz';

module.exports = {
    abc, xyz
};

然后

import modules from 'src/modules.ts'
{ abc: { getSome } } = modules

但是我强烈建议您使用标准模式进行导入。这将使您的代码更简洁,更易于维护

答案 1 :(得分:0)


  

N / B-那是设计应用程序的不好方法。


在节点中,可以通过“ global”或“ GLOBAL”对象设置全局变量:

您可以将所有依赖项导入应用程序入口文件中,并将其存储在Global变量中

index.js

#define BOOST_TEST_MODULE My Test
#define BOOST_TEST_DYN_LINK
#include <boost/test/unit_test.hpp>

#include "MyMath.h"
BOOST_AUTO_TEST_CASE(test) {
    MyMath mm;
    BOOST_CHECK_EQUAL(mm.add(1,2), 3);
}

someotherfile.js

import abc from 'abc';
import xyz from 'xyz';

global.abc = abc
global.xyz = xyz

答案 2 :(得分:0)

通过一个文件导出所有库

import abc from 'abc';
import xyz from 'xyz';

module.exports = {
    abc, xyz
};

在其他文件中使用这些库,例如

import {abc, xyz} from 'src/modules.ts'

var wantSome = abc.getSome();