文件结构:需要 Node.js 中的子模块
File Structure: Requiring Sub-Modules in Node.js
我有以下 Node.js module/npm 包:
|- dist/
|- - requirejs/
|- - - [stuff in amd pattern ...]
|- - node/
|- - - index.js
|- - - submodules/
|- - - - submodule1.js
|- - - - [submodule2.js etc.]
|- package.json
|- README.md
我可以通过模块名称要求 dist/node/index.js
(因为我将它设置为 package.json 中的主要入口点文件),如下所示:
var myModule = require('myModule');
我想通过这样做来要求子模块(如在 AMD 模式中):
var mySubmodule = require('myModule/submodules/submodule1');
这会在 Node.js 中引发错误。问题是,Node.js 需要其 dist/node/
子目录中的主文件,但仍将模块根目录作为工作目录。
假设存在以下结构:
|- dist/
|- - node/
|- - - index.js
|- submodules/
|- - submodule1.js
|- package.json
|- README.md
现在做 require('myModule/submodules/submodule1')
就可以了。
现在的问题是: 是否有任何 setting/config 可以将 "module namespace" 或工作目录设置为主文件所在的目录,或者执行我真的需要将子模块文件夹放入项目根目录,以便在不执行 require('myModule/dist/node/submodules/submodule1')
?
的情况下访问它
简答:你不能。
长答案:您应该直接使用您建议的第二个目录结构 (/myModule/submodules/
) 或将某种 API 添加到您的主要导出 (index.js) 快速获取所需模块。
虽然您可以在技术上调用 require('myModule/some/complex/path')
,但 Node.js / npm 包标准依赖于 require('myModule')
.
提供的独特接口
// /dist/node/index.js
var path = require('path');
exports.require = function (name) {
return require(path.join(__dirname, name));
};
然后在您的应用中:
var myModule = require('myModule');
var submodule1 = myModule.require('submodules/submodule1');
您现在可以使用 Node 的 exports
feature 来执行类似的操作。
我有以下 Node.js module/npm 包:
|- dist/
|- - requirejs/
|- - - [stuff in amd pattern ...]
|- - node/
|- - - index.js
|- - - submodules/
|- - - - submodule1.js
|- - - - [submodule2.js etc.]
|- package.json
|- README.md
我可以通过模块名称要求 dist/node/index.js
(因为我将它设置为 package.json 中的主要入口点文件),如下所示:
var myModule = require('myModule');
我想通过这样做来要求子模块(如在 AMD 模式中):
var mySubmodule = require('myModule/submodules/submodule1');
这会在 Node.js 中引发错误。问题是,Node.js 需要其 dist/node/
子目录中的主文件,但仍将模块根目录作为工作目录。
假设存在以下结构:
|- dist/
|- - node/
|- - - index.js
|- submodules/
|- - submodule1.js
|- package.json
|- README.md
现在做 require('myModule/submodules/submodule1')
就可以了。
现在的问题是: 是否有任何 setting/config 可以将 "module namespace" 或工作目录设置为主文件所在的目录,或者执行我真的需要将子模块文件夹放入项目根目录,以便在不执行 require('myModule/dist/node/submodules/submodule1')
?
简答:你不能。
长答案:您应该直接使用您建议的第二个目录结构 (/myModule/submodules/
) 或将某种 API 添加到您的主要导出 (index.js) 快速获取所需模块。
虽然您可以在技术上调用 require('myModule/some/complex/path')
,但 Node.js / npm 包标准依赖于 require('myModule')
.
// /dist/node/index.js
var path = require('path');
exports.require = function (name) {
return require(path.join(__dirname, name));
};
然后在您的应用中:
var myModule = require('myModule');
var submodule1 = myModule.require('submodules/submodule1');
您现在可以使用 Node 的 exports
feature 来执行类似的操作。