Nodejs中有什么方法可以将require 公用化?

Nodejs中有什么方法可以将require 公用化?

目前有几个库都在每个控制器里用上,像 001.js和002.js 里都require上a.js 和b.js, 像不能像C一样有一个公用的头文件,将引用的公用库都在一个文件引用上呢? 即: header.js require a.js 、b.js 001.js 和002.js 直接 require header.js 可以这样子报错T_T。。

6 回复

在Node.js中,你可以通过模块系统来实现类似C语言中的头文件机制。虽然Node.js没有直接提供类似于“头文件”的概念,但你可以通过一些设计模式来达到相同的效果。一种常见的做法是创建一个配置文件或一个专门的模块,该模块负责加载其他模块并将其导出。这样,你就可以在多个地方引用这个配置模块,而不需要重复地引入相同的模块。

示例

假设我们有以下目录结构:

/project
  /modules
    a.js
    b.js
  /config
    header.js
  /controllers
    001.js
    002.js

a.js 和 b.js

// modules/a.js
module.exports = {
  sayHello: function() {
    console.log("Hello from A");
  }
};

// modules/b.js
module.exports = {
  sayHi: function() {
    console.log("Hi from B");
  }
};

header.js

// config/header.js
const a = require('../modules/a');
const b = require('../modules/b');

module.exports = {
  a,
  b
};

001.js 和 002.js

// controllers/001.js
const { a, b } = require('../config/header');

a.sayHello();
b.sayHi();

// controllers/002.js
const { a, b } = require('../config/header');

a.sayHello();
b.sayHi();

解释

  • a.js 和 b.js:这两个文件分别导出了不同的函数。
  • header.js:在这个文件中,我们引入了a.jsb.js,并将它们导出为一个对象,这样其他模块可以直接从header.js中获取这些模块。
  • 001.js 和 002.js:这两个文件通过引入header.js来访问a.jsb.js中的功能,从而避免了重复的require语句。

这种方式不仅使得代码更加整洁,也提高了代码的可维护性。如果你需要添加新的模块或者修改现有的模块,只需在一个地方进行更改即可。


java也是一样的啊,一个类中要使用的包都必须先import。

公用文件的话再header.js里把每个包都用一个变量名exports出来,然后在001.js里通过header.xxx来访问?

可以把一个变量放在全局 foo.js

global.foo = 'world';

bar.js

require('./foo');
console.log('hello ' + foo); // -> hello world

但这样的方法会污染全局空间,慎用

可以解析一下污染全局空间是什么吗?

node 故意这样设计的,每次都需要 require 挺好。

在Node.js中,可以通过创建一个模块来实现require的公用化。你可以创建一个模块,将需要的库导入到该模块中,然后其他模块通过引入这个模块来间接引入所需的库。

示例代码

假设我们有两个文件 a.jsb.js,以及一个需要使用它们的文件 001.js002.js

a.js

module.exports = {
    funcA: function() {
        console.log('Function A');
    }
};

b.js

module.exports = {
    funcB: function() {
        console.log('Function B');
    }
};

header.js

const a = require('./a.js');
const b = require('./b.js');

module.exports = {
    a,
    b
};

001.js

const header = require('./header.js');

header.a.funcA();
header.b.funcB();

002.js

const header = require('./header.js');

header.a.funcA();
header.b.funcB();

解释

  1. a.js 和 b.js: 这两个文件分别导出了不同的函数。
  2. header.js: 在这个文件中,我们先引入了 a.jsb.js,然后将它们导出。这样,header.js 就成了一个包含 a.jsb.js 的模块。
  3. 001.js 和 002.js: 这两个文件通过引入 header.js 来间接使用 a.jsb.js 中的函数。

这种方法避免了在每个文件中重复 require 同一个模块,从而实现了 require 的公用化。

回到顶部