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.

3voto

André Figueiredo Points 1476

process.mainModule es déprécié depuis la version 14.0.0. Lorsque vous vous référez à la réponse, veuillez utiliser require.main le reste tient toujours.

process.mainModule.paths
  .filter(p => !p.includes('node_modules'))
  .shift()

Obtenir tous les chemins dans les modules principaux et filtrer ceux avec "node_modules", puis récupère le premier chemin de la liste restante. Un comportement inattendu ne déclenchera pas d'erreur, juste un undefined .

Cela fonctionne bien pour moi, même en appelant ie. $ mocha .

2voto

Dariusz Sikorski Points 2126

En haut du fichier principal, ajouter :

mainDir = __dirname;

Utilisez-le ensuite dans n'importe quel fichier dont vous avez besoin :

console.log('mainDir ' + mainDir);
  • mainDir est défini globalement, si vous n'en avez besoin que dans le fichier courant - utilisez __dirname à la place.
  • Le fichier principal se trouve généralement dans le dossier Root du projet et est nommé comme suit main.js , index.js , gulpfile.js .

2voto

Vincent Lab Points 41

Si vous voulez déterminer la racine du projet à partir d'une application node.js en cours d'exécution, vous pouvez tout simplement le faire.

process.mainModule.path

1voto

sultan Points 1120

Rendez-le sexy.


const users = require('../../../database/users'); //  what you have
// OR
const users = require('$db/users'); //  no matter how deep you are
const products = require('/database/products'); //  alias or pathing from root directory

Trois étapes simples pour résoudre le problème de l'enlaidissement des chemins.

  1. Installez le paquet : npm install sexy-require --save

  2. Inclure require('sexy-require') une fois en haut de votre fichier d'application principal.

    require('sexy-require');
    const routers = require('/routers');
    const api = require('$api');
    ...
  3. Étape facultative. La configuration du chemin peut être définie dans .paths dans le répertoire racine de votre projet.

    $db = /server/database
    $api-v1 = /server/api/legacy
    $api-v2 = /server/api/v2

1voto

Manoj Rana Points 301

Cela fonctionne pour moi

process.env.PWD

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