web-dev-qa-db-fra.com

Développer/Résoudre ~ dans node.js

Je suis nouveau sur nodejs. Le noeud peut-il résoudre un exemple (répertoire de départ unix) ~ foo, ~ bar En/home/foo,/home/bar 

 path.normalize ('~ mvaidya') 
 '~ mvaidya' 
> path.resolve ('~ mvaidya') 
 '/ home/mvaidya/~ mvaidya' 
>

Cette réponse est fausse. J'espère que ~ mvaidya doit résoudre/home/mvaidya

36
forvaidya

Comme QZ Support remarque, vous pouvez utiliser process.env.HOME sous OSX/Linux. Voici une fonction simple sans dépendance.

const path = require('path');
function resolveHome(filepath) {
    if (filepath[0] === '~') {
        return path.join(process.env.HOME, filepath.slice(1));
    }
    return filepath;
}
25
Pj Dietz

La raison pour laquelle ceci n'est pas dans Node est parce que ~ expansion est une chose spécifique à bash (ou Shell). On ne sait pas comment y échapper correctement. Voir ce commentaire pour plus de détails.

Il existe différentes bibliothèques offrant cela, la plupart quelques lignes de code ...

Donc, vous voulez probablement le faire vous-même.

14
wires

Cette bibliothèque NodeJS prend en charge cette fonctionnalité via un rappel async. Il utilise la bibliothèque etc-passswd pour effectuer l’extension. Il n’est donc probablement pas portable vers Windows ou d’autres plates-formes autres que Unix/Linux.

Si vous souhaitez uniquement développer la page d'accueil de l'utilisateur actuel, cette API plus légère peut suffire. Il est également synchrone, donc plus simple à utiliser et fonctionne sur la plupart des plateformes.

Exemples:

 expandHomeDir = require('expand-home-dir')

 expandHomeDir('~')
 // => /Users/azer

 expandHomeDir('~/foo/bar/qux.corge')
 // => /Users/azer/foo/bar/qux.corge

Une autre bibliothèque associée est home-dir, qui renvoie le répertoire de base d'un utilisateur sur n'importe quelle plate-forme:

https://www.npmjs.org/package/home-dir
11
Tony O'Hagan

J'en avais juste besoin aujourd'hui et la seule commande moins évasive était celle de os.

$ node
> os.homedir()
'/Users/mdesales'

Je ne suis pas sûr que votre syntaxe soit correcte car ~ est déjà un résultat pour le répertoire d'accueil de l'utilisateur actuel

2
Marcello de Sales

Aujourd'hui, j'ai utilisé https://github.com/sindresorhus/untildify

Je cours sur OSX, a bien fonctionné.

1
clay