需要在NodeJS中使用规范或相对path的文件
我有一个虚构的实用程序包(节点模块),我正在导入到我的应用程序中,如下所示:
var sqrt = require('common-math').sqrt
但是,在common-math
模块中使用这个相同的模块似乎很棘手。 我似乎只有select,这两个都不是理想的:
- 从我需要访问模块的每个地方使用相对path要求。 这可以是
require('../sqrt')
或require('../../../lib/sqrt')
。 - 把模块放在
node_modules/sqrt/index.js
,然后做一个require('sqrt')
。
我只是想能够require('common-math').sqrt
就像这个包的所有消费者一样。 我意识到我可以用一个符号链接创build一个node_modules/common-math
文件夹到我的包的index.js
,但是这是一个常见的/推荐的做法?
节点的模块加载系统是非常有限的,但你想要的是可能的。 然而它并不像你所期望的那样优雅:
var root = (function (p, path) { for (; 'common-math' !== path.basename(p); p = path.dirname(p)); return p; }(module.filename, require('path')); var a = require(root + '/sqrt.js');
甚至:
var root = (function (p) { return p.slice(0, p.indexOf('common-math') + 1).join('/'); }(module.filename.split('/'))); var a = require(root + '/sqrt.js');