Jusqu'à présent, nous pouvions obtenir le chemin absolu d'un fichier à ouvrir ultérieurement en tant que readStream avec cet extrait de code:
var base = path.resolve('.');
var file = base + '/data/test.csv';
fs.createReadStream(file)
Depuis Meteor 0.6.5, le chemin de base pointe sur .meteor/local/build/programs/...
Il y a aussi l'API Assets, qui ne peut pas nous rendre un chemin mais uniquement le document lu. Nous avons besoin d’un flux pour traiter des fichiers de données plus volumineux?
Voici un autre moyen de trouver le répertoire racine de votre projet:
var base = process.env.PWD
Notez que ce n'est pas la même chose que process.cwd()
. Au lieu de cela, c'est le répertoire dans lequel vous avez exécuté la commande meteor
, qui correspond généralement à ce que vous recherchez. Notez également que cela ne sera probablement pas très utile lors de l'exécution de votre application à partir d'un bundle déployé.
J'ai rencontré le même problème lorsque j'ai mis à jour à la version 0.6.5.
Ce que je suis en train de faire est d'obtenir le chemin comme ceci:
var meteor_root = Npm.require('fs').realpathSync( process.cwd() + '/../' );
Ceci retourne en mode dev :
/my/application/.meteor/local/build/programs
et en mode groupé :
/my/application/build/app/programs
Donc à partir d'ici, j'arrive au chemin "racine" de mon application comme suit:
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 + '/../../../../' );
}
Le seul cas dans lequel cela échouerait est si vous nommez le dossier de votre application ".meteor" mais c'est un cas Edge.
Par rapport à cela, vous pouvez accéder à tout ce dont vous avez besoin.
De plus, vous pouvez également accéder directement au dossier des actifs créé par le bundle de météore:
var assets_folder = meteor_root + '/server/assets/' + Npm.require('path').basename( application_root );
Cela risque d’être temporaire, car j’attends éventuellement que de meilleures API d’interaction fichier/chemin soient ajoutées.
J'espère que cela pourra aider
Hey, vous n’avez pas besoin de coder en dur comme les réponses ci-dessus ... jetez un oeil à Ce paquet
Après l'avoir installé, vous pouvez accéder au chemin racine de votre météore simplement avec Meteor.rootPath
Pour météore 0.8.3,
__meteor_bootstrap__.serverDir
donne le répertoire de travail, lorsqu'il est exécuté en mode serveur.
exemple
if (Meteor.isServer) {
console.log(__meteor_bootstrap__.serverDir);
}
Depuis Meteor 1.2.1, cela fonctionne pour moi:
var absoluteBasePath = path.resolve('../../../../../.');
Le même résultat en utilisant split
:
var absoluteBasePath = path.resolve('.').split(path.sep + '.meteor')[0];
Utilisation de process.cwd()
:
var absoluteBasePath = path.resolve(process.cwd(), '../../../../../');
var absoluteBasePath = path.resolve(process.cwd()).split(path.sep + '.meteor')[0];