需要在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');