你当然可以这样做。这将成功避免修改全局的require.paths
数组,这可能会在运行时引起问题,并且不应该对未来的版本产生影响。
你应该能够简单地设置一个模型,然后将其require
到你当前的应用程序中。根据你的示例,x.js应该包含以下内容。
var relative = 'y/';
exports.xrequire = function(path) {
console.log("requiring " + relative + path);
return require(relative+path);
};
然后,您就可以成功地使用自定义的require
了。
var xrequire = require('x.js'),
hello = xrequire('hello.js');
我不建议这样做,但如果你想非常“狡猾”,你可以覆盖 require
函数。
var require = xrequire;
如果您计划使用
require
这个功能,我建议您在模块内详细记录它,但它肯定是有效的。
编辑:
如果文件不存在,您可以测试并回退到
require
。
var relative = 'y/';
exports.xrequire = function(path) {
var ret;
try{
ret = require(relative+path);
console.log("requiring " + relative + path);
}catch(e){
console.log("requiring " + path);
ret = require(path);
}
return ret;
};
我认为你可以尝试在 require 路径的开头添加 process.cwd
,以强制首先查找正确的目录。老实说,这会让大多数开发人员感到困惑。我建议只为您的应用程序定义一个命名空间,并创建一个特殊的 require 函数,仅检索该命名空间应用程序的特殊函数。
x/hello.js
,而不是y/hello.js
— 我希望它能像标准的 require 一样工作。 - Aaron Yodaiken