2013-03-06 9 views
16

私はデバッグブール値を持つ実行可能ノード/ javascriptスクリプトを持っていますが、trueに設定すると2つのファイルが書き込まれます。この実行可能ファイルはノードモジュールでもあります。スクリプトを実行しているユーザーの作業ディレクトリによっては、関数がファイルを書き込むディレクトリを見つけることができないようです。モジュール内の相対ファイルシステムの書き込みパス

モジュールは、パスは持っているだろう、この

output/ 
lib/ 
    helpers.js 
index.js 

私の元の推論のように構成されています。

helper.write = function(data,filename){ 
    if(typeof data !== "string") data = JSON.stringify(data); 
    fs.writeFileSync("./output/"+filename, data); 
}; 

モジュールは、その別の実行ファイルで使用されている場合node_moduleフォルダ内

fs.writeFileSync("process.cwd()+"/node_modules/the_module/output/"+filename, data); 

このよう
node ./my_app/node_modules/the_module/index.js 

からスクリプトを実行すると、これがさらに混乱取得するときしかし、この作品ライブラリを使用します。

node ./my_app/run.js 

これらの変数すべてから独立してファイルを保存する方法はありますか?

答えて

42

質問を正しく理解していれば、常に現在のスクリプトと相対的なパスに書きたいと思っています。現在実行中のスクリプトが中に存在するディレクトリの名前を取得するには、そのよう__dirnameを使用することができます。

言われていること
var path = require('path'); 

helper.write = function(data,filename){ 
    if(typeof data !== "string") data = JSON.stringify(data); 
    var file = path.join(__dirname, 'output', filename); 
    fs.writeFileSync(file, data); 
}; 

が、私はそれはあなたのnode_modulesディレクトリの中のファイルを書くことにすることをお勧めだとは思いません。あなたのモジュールがファイルシステムのどこか他の場所にあるファイルへのフルパスを必要とすることをお勧めします。呼び出し元が独自のプロジェクトツリーの出力ディレクトリに書き込む場合は、同じ__dirnameトリックを再度使用できます。