492 votes

Déterminer la racine du projet à partir d'une application node.js en cours d'exécution

Y a-t-il un autre moyen, autre que process.cwd() pour obtenir le nom du chemin du répertoire racine du projet en cours. Est-ce que Node implémente quelque chose comme la propriété de Ruby, Rails.root ,. Je cherche quelque chose qui soit constant et fiable.

9voto

Akash Points 5697

Il existe un INIT_CWD la propriété sur process.env . C'est ce que j'utilise actuellement dans mon projet.

const {INIT_CWD} = process.env; // process.env.INIT_CWD 
const paths = require(`${INIT_CWD}/config/paths`);

Bonne chance...

6voto

Ben Davies Points 501

Une technique que j'ai trouvée utile lors de l'utilisation d'express est d'ajouter ce qui suit à app.js avant que toutes les autres routes soient définies

// set rootPath
app.use(function(req, res, next) {
  req.rootPath = __dirname;
  next();
});

app.use('/myroute', myRoute);

Il n'est pas nécessaire d'utiliser les globales et vous avez le chemin du répertoire racine comme propriété de l'objet de la demande.

Cela fonctionne si votre app.js se trouve dans la racine de votre projet, ce qui est le cas par défaut.

6voto

Avi Tshuva Points 241

En fait, je trouve que la solution peut-être triviale est aussi la plus robuste : vous placez simplement le fichier suivant dans le répertoire racine de votre projet : Root-path.js qui contient le code suivant :

import * as path from 'path'
const projectRootPath = path.resolve(__dirname)
export const rootPath = projectRootPath

4voto

Pankaj Shinde Points 124

Ajoutez-le quelque part vers le début de votre fichier d'application principal (par exemple, app.js) :

global.__basedir = __dirname;

Ceci définit une variable globale qui sera toujours équivalente au répertoire de base de votre application. Utilisez-la comme n'importe quelle autre variable :

const yourModule = require(__basedir + '/path/to/module.js');

Simple...

4voto

VIKAS KOHLI Points 1994

Je sais que celui-ci est déjà trop tard. Mais nous pouvons récupérer l'URL de la racine par deux méthodes

1ère méthode

var path = require('path');
path.dirname(require.main.filename);

2ème méthode

var path = require('path');
path.dirname(process.mainModule.filename);

Lien de référence:- https://gist.github.com/geekiam/e2e3e0325abd9023d3a3

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X