Node js / Express js chemins relatifs (point ou __dirname ou sans préfixe)?
Je suis à la recherche d'Nodejs/expressjs et avons vu les différents tutoriels utiliser __diranme + "/my_folder"
"./my_folder"
ou tout simplement "my_folder"
.
Exemples:
app.use("/static", express.static(__dirname + "/my_folder"));
app.use("/static", express.static("./my_folder"));
app.use("/static", express.static("my_folder"));
J'ai tout essayé et ils semblent tous à travailler; qui dois-je utiliser pour les chemins relatifs?
J'ai aussi vu require('./my_file.js')
et require('my_file')
. Est-il une différence? Que dois-je utiliser?
source d'informationauteur Raekye
Vous devez vous connecter pour publier un commentaire.
Presque toutes les fonctions (sauf pour
require
) qui prend les chemins de fichier comme argument, sera à un point utilisation des fonctions de lafs
module de lire ou d'écrire pour eux.Node.js documentation fs module dit:
Quand vous pensez à ce sujet, il exige une ruse pour avoir ces fonctions se comportent différemment. Après tout, le fs fonctions régulières en Javascript et ils n'ont pas spécial d'accès à l'information sur l'appelant. La seule
__dirname
qu'ils puissent accéder à serait la__dirname
de leur propre module de base module fs).Le fait que le
require
fonction peut résoudre les chemins d'accès relatifs à la__dirname
sans spécifier de manière explicite, c'est parce querequire
est une fonction unique pour chaque fichier il paraît. De cette façon, il a accès au module en cours de détails, et en particulier son chemin.La raison de votre code arrive à travailler est qu'actuellement, le
app.js
(ou similaire) le code ci-dessus s'affiche en arrive à être dans le même répertoire que ceprocess.cwd()
ne l'est actuellement. I. e. démarrer l'application avecnode app.js
lors du démarrage de l'application avecnode myappdir/app.js
(ran de son répertoire parent) ne le serait pas.process.cwd()
serait différent.Aussi longtemps que vous gardez à l'esprit que les chemins relatifs être résolu par
process.cwd()
alors vous pouvez utiliser la syntaxe plus courte. Dans certains cas, il peut être un avantage. Cela rend votre code dépend de comment on l'appelle. Personnellement, je préfère utiliser des__dirname
parce que c'est un peu plus transparent quant à ce qui se passe, et les chemins d'accès relatifs compatible avec les chemins d'accès que vous utilisez dans unrequire
instruction pour le même fichier.La
__dirname
version est la plus robuste depuis__dirname
sera toujours le répertoire contenant en cours d'exécution.js
fichier, qui est un meilleur ancrage de"my_folder"
ou"./my_folder"
qui sont à la fois les chemins relatifs et échoue si le processus du répertoire de travail courant (process.cwd()
) est quelque chose d'inattendu, qui est tout à fait possible.Noter que c'est une autre histoire pour les chemins passé à
require
comme les chemins relatifs y sont résolues par rapport à l'emplacement du module appelant, sans égard pour le processus du répertoire de travail courant (encore une fois, ce qui les rend moins fragile).- Je utiliser
app.use(express.static(path.join(__dirname, 'public')));
qui je puis avoir trois dossiers à l'intérieur de mon public, les feuilles de style, le javascript et les images qui me permet d'accéder à ces fichiers statiques parla
./myfolder
approche, je crois, est essentiellement la même chose. Je ne l'ai jamais utilisé.le
/myfolder
approche que j'ai jamais vu.La
require('myfile')
est un appel à l'paquets que vous installez ou que vous venez d'installer avec express.