18

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

モジュールはこのように構成されています

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

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

4

1 に答える 1

44

私が質問を正しく理解しているなら、あなたは常に現在のスクリプトに関連するパスに書き込みたいと思うでしょう。現在実行中のスクリプトが存在するディレクトリの名前を取得するには、次の__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トリックを再度使用できます。

于 2013-03-06T18:23:55.180 に答える