Je crée une interface de ligne de commande de nœud. Il est installé globalement et utilise un fichier bin pour s'exécuter.
Je prévois d'ouvrir une fenêtre de commande dans le répertoire racine des fichiers sur lesquels je travaille, puis d'exécuter simplement la commande, mais je n'ai pas pu déterminer le répertoire de travail actuel car il process.cwd()
renvoie le répertoire du package de nœuds. J'ai d'abord supposé que puisque le code est exécuté en utilisant un fichier batch comme wrapper (c'est ainsi que les fichiers bin peuvent s'exécuter sans nœud au début), il est impossible mais coffee-script parvient à le faire. J'ai jeté un coup d'œil à la source de coffee-script mais je n'ai pas pu la suivre (pas assez expérimenté).
Pour le tester par vous-même, créez un package avec ce fichier package.json:
{
"name": "test-package",
"version": "1.0.0",
"bin": {
"test-package": "./bin/test-package"
},
"main": "/lib/test"
}
ce fichier de package de test dans bin:
#!/usr/bin/env node
var path = require('path');
var fs = require('fs');
var lib = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');
require(lib + '/test');
Quelqu'un pourrait-il faire la lumière là-dessus.
puis essayez d'obtenir le répertoire de ligne de commande dans lib / test.
la source
process.chdir()
, y a-t-il un moyen d'obtenir l'original?var originalCwd = process.cwd();
exécutez votreprocess.chdir()
, et vous pourrez ensuite revenir à l'original).../lib/test
portable?../lib/test
c'est portable, alors que l'homologue Windows..\lib\test
n'est pas ...Répertoire de travail actuel
Pour obtenir le répertoire de travail actuel, vous pouvez utiliser:
Cependant, sachez que certains scripts, notamment gulp, modifieront le répertoire de travail actuel avec
process.chdir()
.Chemin du module de nœud
Vous pouvez obtenir le chemin du module actuel avec:
__filename
__dirname
Répertoire d'origine (où la commande a été lancée)
Si vous exécutez un script à partir de la ligne de commande et que vous voulez le répertoire d'origine à partir duquel le script a été exécuté, quel que soit le répertoire dans lequel le script fonctionne actuellement, vous pouvez utiliser:
Répertoire d'origine, lors de l'utilisation de scripts NPM
Il est parfois souhaitable d'exécuter un script NPM dans le répertoire courant, plutôt qu'à la racine du projet.
Cette variable est disponible dans les scripts de package npm sous la forme:
Vous devez exécuter une version récente de NPM. Si cette variable n'est pas disponible, assurez-vous que NPM est à jour.
Cela vous permettra d'accéder au chemin actuel dans votre package.json, par exemple:
la source
process.env.INIT_CWD
renvoie le dir depackage.json
Sinon, si vous souhaitez obtenir uniquement le répertoire courant du script NodeJS actuel, vous pouvez essayer quelque chose de simple comme celui-ci. Notez que cela ne fonctionnera pas dans le Node CLI lui-même:
la source
path.resolve('.')
est également une option fiable et propre, car nous avons presque toujoursrequire('path')
. Il vous donnera le chemin absolu du répertoire à partir duquel il est appelé.la source
Voici ce qui a fonctionné pour moi:
la source