L'expansion / la Résolution de ~ dans node.js
Je suis nouveau sur nodejs. Peut nœud résoudre ~ (unix répertoire home) exemple ~foo, ~bar
à /home/toto /home/bar
> chemin d'accès.normalize('~mvaidya') '~mvaidya' > chemin d'accès.résoudre('~mvaidya') '/home/mvaidya/~mvaidya' >
Cette réponse ne l'est pas; j'espère que ~mvaidya doit resolv à /home/mvaidya
Vous devez vous connecter pour publier un commentaire.
Comme QZ Soutien noté, vous pouvez utiliser
process.env.HOME
sur OSX/Linux. Voici une fonction simple sans dépendances.~foo
à/home/<current-user>/foo
lorsque techniquement, il doit se résoudre à/home/foo
(au moins dans zsh).process.env.HOME
, peut-être devriez utiliserrequire('os').homedir()
?La raison pour laquelle ce n'est pas dans le Nœud est parce que
~
expansion est unebash
(ou shell) spécifiques chose. Il est difficile de savoir comment échapper correctement. Voir ce commentaire pour plus de détails.Il y a différentes bibliothèques proposant cela, la plupart des quelques lignes de code...
https://npm.im/untildify ; ne pas faire beaucoup plus que
os.homedir()
, voir index.js#L10https://npm.im/expand-tilde ; utilise essentiellement
os-homedir
pour atteindre le même, voir index.js#L12https://npm.im/tilde-expansion ; il utilise
etc-passwd
donc il ne semble pas très de la croix-plate-forme, voir index.js#L21Donc, vous voulez probablement faire vous-même.
~
est un bash-chose.Ce NodeJS bibliothèque prend en charge cette fonctionnalité via un async de rappel. Il utilise le etc-passswd lib pour effectuer l'expansion est donc probablement pas de portable pour Windows ou d'autres systèmes Unix/Linux.
Si vous ne voulez développez la page d'accueil du utilisateur actuel alors ce poids plus léger de l'API peut être tout ce dont vous avez besoin. Il est également synchrone, donc plus simple à utiliser et fonctionne sur la plupart des plateformes.
Exemples:
Une autre lib est la maison-dir qui renvoie un répertoire home de l'utilisateur sur n'importe quelle plateforme:
process.env.HOME
semble fonctionner à merveille bien à la place du nœud du module solutions mentionnées dans d'autres posts. par exemple,~/somepath
peut êtreprocess.env.HOME + '/somepath'
, attention cependant... il ne résoudra pas la question d'origine de~someuserhome/somepath
qu'il aurait besoin du module solutions liées.Aujourd'hui, j'ai utilisé https://github.com/sindresorhus/untildify
Je tourne sur OSX, a bien fonctionné.
J'ai juste besoin aujourd'hui et le moins évasive commande était celui de la
os
.Je ne suis pas sûr si votre syntaxe est correcte, car ~ est déjà un résultat pour le répertoire home de l'utilisateur courant
Un exemple:
const os = require("os");
"~/Dropbox/sample/music".replace("~", os.homedir)