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.
Réponses
Trop de publicités?
process.mainModule
es déprécié depuis la version 14.0.0. Lorsque vous vous référez à la réponse, veuillez utiliserrequire.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
.
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
.
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.
-
Installez le paquet :
npm install sexy-require --save
-
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'); ...
-
É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