hea*_*der 6 javascript require node.js npm node-modules
我有以下Node.js模块/ npm包:
|- dist/
|- - requirejs/
|- - - [stuff in amd pattern ...]
|- - node/
|- - - index.js
|- - - submodules/
|- - - - submodule1.js
|- - - - [submodule2.js etc.]
|- package.json
|- README.md
Run Code Online (Sandbox Code Playgroud)
我可以dist/node/index.js通过模块名称要求(因为我将它设置为package.json中的主入口点文件),如下所示:
var myModule = require('myModule');
Run Code Online (Sandbox Code Playgroud)
我想通过这样做来要求子模块(如在AMD模式中):
var mySubmodule = require('myModule/submodules/submodule1');
Run Code Online (Sandbox Code Playgroud)
这会在Node.js中引发错误.问题是,Node.js需要来自其dist/node/子目录的主文件,但仍然将模块保存为工作目录.
假设存在以下结构:
|- dist/
|- - node/
|- - - index.js
|- submodules/
|- - submodule1.js
|- package.json
|- README.md
Run Code Online (Sandbox Code Playgroud)
现在做起require('myModule/submodules/submodule1')作用.
问题:是否有任何设置/配置将"模块命名空间"或工作目录设置为主文件所在的目录,或者我是否真的需要将子模块文件夹放入项目根目录中,以使其无需访问做什么require('myModule/dist/node/submodules/submodule1')?
小智 9
简短的回答:你做不到.
答案很长:您应该直接使用您建议的第二个目录结构(/myModule/submodules/),或者在主要导出(index.js)中添加某种API 以快速获取所需的模块.
虽然您可以在技术上调用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));
};
Run Code Online (Sandbox Code Playgroud)
然后在你的应用中:
var myModule = require('myModule');
var submodule1 = myModule.require('submodules/submodule1');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4337 次 |
| 最近记录: |