41

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

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

fs.createReadStream(file)

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

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

4

7 に答える 7

17

0.6.5 にアップデートしたときに、同じ苦境に陥りました。

私が現在行っているのは、次のようなパスを取得することです。

var meteor_root = Npm.require('fs').realpathSync( process.cwd() + '/../' );

これは開発モードで戻ります:

/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」という名前を付けた場合ですが、これはエッジ ケースです。

それに関連して、必要なものにアクセスできます。

さらに、Meteor バンドラーが作成するアセット フォルダーに直接アクセスすることもできます。

var assets_folder = meteor_root + '/server/assets/' + Npm.require('path').basename( application_root );

最終的にはより優れたファイル/パス相互作用 API が追加されると予想されるため、これは一時的なものである可能性があります。

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

于 2013-09-26T06:29:36.523 に答える
8

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

Assets.absoluteFilePath(assetPath)

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

流星Github

于 2016-06-02T11:20:14.977 に答える
6

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

インストール後、流星のルートパスにアクセスできますMeteor.rootPath

于 2015-09-18T17:41:44.007 に答える
1

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];
于 2016-03-11T20:08:15.123 に答える