web-dev-qa-db-fra.com

Trouver le chemin de base absolu du répertoire du projet

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?

32
loomi

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é.

58
Christian Fritz

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

16
SuitedSloth

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

6
SsouLlesS

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);
}
4
nshimiye

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