これまで、ファイルの絶対パスを取得して、このコードスニペットでreadStreamとして後で開くことができました。
var base = path.resolve('.');
var file = base + '/data/test.csv';
fs.createReadStream(file)
Meteor 0.6.5以降、ベースパスは.meteor/local/build/programs/...
を指している
Assets APIもありますが、これはパスを返すことはできませんが、読み取りドキュメントのみを返します。しかし、大きなデータファイルを処理するにはストリームが必要ですか?
プロジェクトのルートディレクトリを見つける別の方法は次のとおりです。
_var base = process.env.PWD
_
これはprocess.cwd()
と同じではないことに注意してください。代わりに、meteor
コマンドを実行したディレクトリであり、通常は探しているものです。また、デプロイされたバンドルからアプリを実行する場合、これはおそらくあまり役に立ちません。
0.6.5にアップデートしたとき、私は同じ苦境に陥りました。
私が現在していることは、次のようなパスを取得することです。
var meteor_root = Npm.require('fs').realpathSync( process.cwd() + '/../' );
これはdevモードでを返します:
/my/application/.meteor/local/build/programs
およびバンドルモード:
/my/application/build/app/programs
ここから、アプリケーションの「ルート」パスにアクセスします。
var application_root = Npm.require('fs').realpathSync( meteor_root + '/../' );
// if running on dev mode
if( Npm.require('path').basename( Npm.require('fs').realpathSync( meteor_root + '/../../../' ) ) == '.meteor' ){
application_root = Npm.require('fs').realpathSync( meteor_root + '/../../../../' );
}
これが失敗する唯一のケースは、アプリケーションのフォルダに「.meteor」という名前を付けた場合ですが、それはEdgeのケースです。
それに関連して、必要なものにアクセスできます。
さらに、Meteorバンドラーが作成するアセットフォルダーに直接アクセスすることもできます。
var assets_folder = meteor_root + '/server/assets/' + Npm.require('path').basename( application_root );
これは一時的に行われる可能性が高いため、最終的にはより良いファイル/パスインタラクションAPIが追加される予定です。
役立つことを願っています
上記の回答のようにハードコーディングする必要はありません... このパッケージ をご覧ください
それをインストールした後、あなたはあなたの流星のルートパスにアクセスすることができますMeteor.rootPath
Meteor 0.8.3の場合、
__meteor_bootstrap__.serverDir
は、サーバーモードで実行すると、作業ディレクトリを提供します。
例
if (Meteor.isServer) {
console.log(__meteor_bootstrap__.serverDir);
}
Meteor 1.2.1の時点で、これは私にとってはうまくいきます:
_var absoluteBasePath = path.resolve('../../../../../.');
_
split
を使用した同じ結果:
_var absoluteBasePath = path.resolve('.').split(path.sep + '.meteor')[0];
_
process.cwd()
を使用:
_var absoluteBasePath = path.resolve(process.cwd(), '../../../../../');
var absoluteBasePath = path.resolve(process.cwd()).split(path.sep + '.meteor')[0];
_