为require()configuration多个path

我应该如何configuration多个path的要求?

我有以下结构:

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

我应该如何configuration多个path? 目前使用require.paths给我一个错误: Error: require.paths is removed.

我想保持这种结构,因为我的应用程序必须提供来自共享的静态.js文件,我想避免共享服务器端.js文件。

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

当我调用require('anotherClass')它必须在客户机和服务器上工作。 所以使用相对path可以工作,但我也有require('implementationClass') ,它返回客户端实现或服务器实现,并且当它们从common类中调用时,这种方法将失败。

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

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

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

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

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

 global.mod = function (file){ return require (path.resolve ("../..", file)); }; var myClass = mod ("server/myClass"); var myOtherClass = mod ("common/myOtherClass"); 

为自己的模块使用require和相对path是一个非常糟糕的方法。