web-dev-qa-db-ja.com

プロジェクトディレクトリの絶対ベースパスを見つける

これまで、ファイルの絶対パスを取得して、このコードスニペットでreadStreamとして後で開くことができました。

var base = path.resolve('.');
var file = base + '/data/test.csv';

fs.createReadStream(file)

Meteor 0.6.5以降、ベースパスは.meteor/local/build/programs/...を指している

Assets APIもありますが、これはパスを返すことはできませんが、読み取りドキュメントのみを返します。しかし、大きなデータファイルを処理するにはストリームが必要ですか?

33
loomi

バージョン1.3以降、 文書化 関数

Assets.absoluteFilePath(assetPath)

プロジェクトパスを確実に取得する最良の方法のようです。

流星Github

6
loomi

プロジェクトのルートディレクトリを見つける別の方法は次のとおりです。

_var base = process.env.PWD
_

これはprocess.cwd()と同じではないことに注意してください。代わりに、meteorコマンドを実行したディレクトリであり、通常は探しているものです。また、デプロイされたバンドルからアプリを実行する場合、これはおそらくあまり役​​に立ちません。

59
Christian Fritz

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が追加される予定です。

役立つことを願っています

16
SuitedSloth

上記の回答のようにハードコーディングする必要はありません... このパッケージ をご覧ください

それをインストールした後、あなたはあなたの流星のルートパスにアクセスすることができますMeteor.rootPath

6
SsouLlesS

Meteor 0.8.3の場合、

__meteor_bootstrap__.serverDirは、サーバーモードで実行すると、作業ディレクトリを提供します。

if (Meteor.isServer) {
   console.log(__meteor_bootstrap__.serverDir);
}
4
nshimiye

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];
_
1
Konard