あなたは確かにこれを行うことができます。実行時に問題を引き起こす可能性のあるグローバル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;
この機能を:Dする予定がある場合は、モジュール内でこれを完全に文書化します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;
};
process.cwd
最初に正しいディレクトリを強制的に検索するために、requireパスの先頭に追加してみてください。正直なところ、これはほとんどの開発者を混乱させるでしょう。アプリの名前空間を定義し、その名前空間のアプリの特別な関数のみを取得する特別なrequire関数を作成することをお勧めします。