你当然可以做到这一点。它将成功避免修改可能在运行时造成问题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
:D 这个功能,我肯定会在您的模块中彻底记录这一点,但它确实有效。
编辑:
好吧,您可以测试该文件并回退到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;
};
我认为您可以尝试添加process.cwd
到 require 路径的开头以强制首先查看正确的目录。老实说,这会让大多数开发人员感到困惑。我建议只为您的应用程序定义一个命名空间并创建一个特殊的 require 函数,该函数仅检索该命名空间应用程序的特殊功能。