Node.js实用模块结构
Node.js utility module structure
当我在许多不同的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
相关文章:
- TypeScript代码类似于揭示模块模式结构
- 文件结构:使用索引.js文件级联访问子模块或子文件
- 节点模块的可能结构
- 类代码结构,使用非立即执行的模块模式变体
- 如何创建一个结构化为AMD模块的可重用库
- AngularJS:目录结构(例如模块化编程)是否会影响加载时间
- 节点中的JSTOXML转换器模块未以正确的结构解析数据
- Node.js & Express - 应用程序结构的全局模块和最佳实践
- 使用指令对网站的HTML结构进行模块化
- SystemJS-ES6模块加载器-导入时层次结构过多
- 在节点中使用模块导出以获得更好的结构
- node.js中模块化socket.io的体系结构
- requirejs的结构;页面模块”;
- 如何使用javascript::minify模块缩小目录结构中的所有js文件
- 文件结构的最佳实践-使用请求模块(Node.js + Express.js)
- 文件结构:在Node.js中需要子模块
- 初学者对Express和socket.io中的模块结构感到困惑
- 寻求结构解释(揭示模块模式)
- Node.js模块导出函数结构
- Node.js实用模块结构