文件结构:需要Node.js中的子模块

时间:2015-09-09 11:36:48

标签: javascript node.js npm require node-modules

我有以下Node.js模块/ 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')会有效。

现在问题:是否有任何设置/配置将“模块命名空间”或工作目录设置为主文件所在的目录,或者我是否真的需要放置子模块文件夹进入项目根目录,以便在不进行require('myModule/dist/node/submodules/submodule1')的情况下访问它?

2 个答案:

答案 0 :(得分:9)

简短的回答:你做不到。

答案很长:您应该直接使用您建议的第二个目录结构(/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');

答案 1 :(得分:0)

您现在可以使用Node的exports feature做类似的事情。