Node.js实用模块结构

Node.js utility module structure

本文关键字:模块 结构 js Node      更新时间:2023-09-26

当我在许多不同的Node.js项目上工作时,我开始有一些通用的代码,我想把它们移到一个新的Node.js包中,以避免多次重写相同的代码。我有一个新的Node.js模块,我在我的项目中使用npm link

现在,我有点困惑,如何构建这个公共库,以便正确地模块化它。这是我现在在公共库中的文件:

// "my-common-lib"'s app.js
module.exports = {
    math: require("./math/mathLib"),
    network: require("./network/networkLib")
};

,

//mathLib.js 
exports.pi = 3.14;

这个工作,我可以在另一个node.js项目中执行以下操作:

var commonLibrary = require("my-common-lib");
var commonMath = commonLibrary.Math;
console.log("Pi: " + commonMath.pi);

虽然这解决了问题,但我更喜欢类似lodash的方式:

var commonMath = require("my-common-lib/math");
console.log("Awesome pi: " + commonMath.pi);

我不太清楚lodash是如何做到的,我绝对希望避免有一个巨大的主js文件。

TL;DR我想模块化一个node.js模块,这样我就可以要求子模块(require("my-common-lib'myCommonMathLib")),我该怎么做?

lodash使用专用的模块化构建。以ES6构建为例。每个"子项目"都有一个专用的模块,在一个专用的'.js'文件中。聚合文件(lodash.js)只是导入所有其他模块。

如果你想要好的lib/module约定,只需在顶层有一个你的lib.js文件(聚合器),旁边是一个同名的目录,所有内部模块都保存在那里。

require("lib")部分的另一个选项是在package.json

中拥有"main": "lib.js"配置

例如,如果您想使用lodash/array, LoDash有一个array.js文件,其中如下:

module.exports = {
  'chunk': require('./array/chunk'),
  'compact': require('./array/compact'),

你可以很容易地把math.js放在你的主文件夹里,就像这样:

module.exports = {
   pi: 3.14
   // OR
   pi: require('./math/pi'); // and have file pi.js inside math folder
}

这样你就可以把它用作缩写:

var math = require('my-common-lib/math');
math.pi; // 3.14