使用规范或根相对路径在NodeJS中需要文件

时间:2014-01-07 02:30:56

标签: node.js

我有一个虚构的实用程序包(节点模块),我将其导入到我的应用程序中,如下所示:

var sqrt = require('common-math').sqrt

但是,在common-math模块中使用相同的模块似乎很棘手。我似乎只有选择,两者都不理想:

  • 从我需要访问模块的每个地方使用相对路径要求。这可以是require('../sqrt')require('../../../lib/sqrt')
  • 将模块放入node_modules/sqrt/index.js,然后执行require('sqrt')

我希望能够require('common-math').sqrt就像这个软件包的所有消费者一样。我意识到我可以创建一个带有符号链接的node_modules/common-math文件夹到我的包index.js,但这是一种常见/推荐的做法吗?

1 个答案:

答案 0 :(得分:1)

Node的模块加载系统非常有限,但你想要的是什么。然而,它并不像你期望的那样优雅:

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');