wake-up-neo.net

Finden Sie den absoluten Basispfad des Projektverzeichnisses

Bis jetzt konnten wir den absoluten Pfad einer Datei erhalten, um sie später mit diesem Code-Snippet als readStream zu öffnen:

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

fs.createReadStream(file)

Seit Meteor 0.6.5 verweist der Basispfad auf .meteor/local/build/programs/...

Es gibt auch die Assets-API, die uns aber keinen Pfad zurückgeben kann, sondern nur das gelesene Dokument. Wir brauchen aber einen Stream, um größere Dateien zu verarbeiten?

32
loomi

Seit Version 1.3 ist die dokumentierte Funktion

Assets.absoluteFilePath(assetPath)

scheint der beste Weg zu sein, um den Projektpfad zuverlässig zu ermitteln.

Meteor Github

6
loomi

Eine andere Möglichkeit, das Stammverzeichnis Ihres Projekts jetzt zu finden, ist folgende:

var base = process.env.PWD

Beachten Sie, dass dies nicht mit process.cwd() identisch ist. Stattdessen ist es das Verzeichnis, in dem Sie den Befehl meteor ausgeführt haben. Dies ist normalerweise das, wonach Sie suchen. Beachten Sie auch, dass dies wahrscheinlich nicht sehr hilfreich ist, wenn Sie Ihre App mit einem bereitgestellten Bundle ausführen.

58
Christian Fritz

Als ich auf 0.6.5 aktualisiert habe, bin ich in die gleiche Situation geraten.

Was ich gerade mache, ist den Weg so zu bekommen:

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

Dies liefert im Dev-Modus :

/my/application/.meteor/local/build/programs

und im gebündelten Modus :

/my/application/build/app/programs

Von hier aus komme ich also wie folgt zum "root" -Pfad meiner Anwendung:

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 + '/../../../../' );
}

Der einzige Fall, in dem dies fehlschlagen würde, ist, wenn Sie den Ordner der Anwendung ".meteor" nennen, dies ist jedoch ein Edge-Fall.

Relativ dazu können Sie auf alles andere zugreifen, was Sie benötigen. 

Darüber hinaus können Sie auch direkt auf den vom Meteor-Bundler erstellten Assets-Ordner zugreifen:

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

Dies ist wahrscheinlich nur vorübergehend, da ich erwarte, dass eventuell bessere APIs für die Datei-/Pfad-Interaktion hinzugefügt werden. 

Hoffentlich hilft das

16
SuitedSloth

Hey, du brauchst nicht wie die obigen Antworten hart zu codieren ... schau nach Dieses Paket

Nach der Installation können Sie auf den Wurzelpfad Ihres Meteors zugreifen, indem Sie Meteor.rootPath

6
SsouLlesS

Für Meteor 0.8.3

__meteor_bootstrap__.serverDir gibt das Arbeitsverzeichnis aus, wenn es im Server-Modus ausgeführt wird.

beispiel

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

Ab Meteor 1.2.1 funktioniert das für mich:

var absoluteBasePath = path.resolve('../../../../../.');

Dasselbe Ergebnis mit split:

var absoluteBasePath = path.resolve('.').split(path.sep + '.meteor')[0];

process.cwd() verwenden:

var absoluteBasePath = path.resolve(process.cwd(), '../../../../../');
var absoluteBasePath = path.resolve(process.cwd()).split(path.sep + '.meteor')[0];
1
Konard