为require()配置多个路径

时间:2013-01-02 17:31:52

标签: node.js

我应该如何为require配置多个路径?

我有以下结构:

application
|-server
| |-main.js
| |-myClass.js
| |-myClass.js
| |-implementationClass.js
|-common
| |-myOtherClass.js
| |-anotherClass.js
| |-yetAnotherClass.js
|-client
| |-aClientClass.js
| |-anotherClientClass.js
| |-implementationClass.js

我希望能够做到这样的事情:

require('myClass');
require('myOtherClass');

我应该如何配置多条路径? 目前使用require.paths时出现错误:Error: require.paths is removed.

我想保留此结构,因为我的应用程序必须提供来自共享的静态.js文件,并且我希望避免共享服务器端.js文件。

此外,文件在客户端上使用require()函数,该函数模拟node.js require(),我不想使用相对路径。

问题是,当我呼叫require('anotherClass')时,它必须在客户端和服务器上工作。因此,使用相对路径可以工作,但我也有require('implementationClass')返回客户端实现或服务器实现,当从common类调用它们时,这种方法将失败。

2 个答案:

答案 0 :(得分:1)

要求子模块的最佳做法是使用相对路径:

require('./server/myClass');
require('./common/myOtherClass');

如果您使用的是requirejs,则可以为客户端配置别名:

require.config({
    baseUrl: "http://example.com/static/",
    paths: {
        "myClass": "./server/myClass",
        "myOtherClass": "./common/myOtherClass"
    }
});

我建议做上面这样的事情,但如果你真的希望能够全局要求它们,你可以在启动应用程序之前设置或修改NODE_PATH环境变量。 require.paths已删除,因为它只会导致问题。

答案 1 :(得分:0)

global.mod = function (file){
    return require (path.resolve ("../..", file));
};

var myClass = mod ("server/myClass");
var myOtherClass = mod ("common/myOtherClass");

对你自己的模块使用带有相对路径的require是一种非常难看的方法。