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?
Seit Version 1.3 ist die dokumentierte Funktion
Assets.absoluteFilePath(assetPath)
scheint der beste Weg zu sein, um den Projektpfad zuverlässig zu ermitteln.
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.
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
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
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);
}
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];