Pour trouver le répertoire utilisé par un script npm sur votre Mac, vérifiez quel package possède le script, puis affichez le répertoire depuis l'intérieur de ce script. npm exécute un script depuis le dossier de son package, même si vous lancez npm run depuis un autre endroit. Dans un projet avec workspaces, le package du workspace sélectionné peut être le dossier concerné. Les étapes ci-dessous vous aident à identifier le chemin exact et à le distinguer du dossier où vous avez tapé la commande.
1. Trouver le package et le script que vous exécutez
Ouvrez Terminal et accédez au dossier du projet où vous exécutez habituellement npm. macOS utilise zsh par défaut dans Terminal, bien que votre shell puisse être modifié. Utilisez pwd pour afficher votre répertoire actuel, puis listez les fichiers pour voir si ce dossier contient un fichier package.json. Le guide de Terminal d’Apple explique comment saisir des commandes dans Terminal et utiliser des outils tels que ls.
pwd
ls
Si vous n'êtes pas sûr du package qui définit le script, inspectez le fichier package.json dans le dossier actuel. Vous pouvez l'afficher avec cat package.json ou l'ouvrir dans un éditeur de texte. Recherchez le nom du script sous l'objet scripts. Par exemple, dans "scripts": { "build": "node build.js" }, le nom du script à exécuter est build. Ne présumez pas que le dossier racine du projet possède le script s'il s'agit d'un dépôt avec workspaces.
2. Vérifier le répertoire attendu par npm
Pour les versions actuelles de npm, les scripts s'exécutent depuis la racine du dossier du package, quel que soit le répertoire à partir duquel vous avez appelé npm run. Dans un projet standard, il s'agit du dossier contenant le package.json du package. Dans un projet avec workspaces, npm peut exécuter le script dans le contexte d'un workspace sélectionné ; c'est le package du workspace qu'il convient de vérifier. Consultez la documentation de npm sur les répertoires de travail des scripts et l'exécution de scripts dans les workspaces.
Ce comportement documenté constitue un bon point de départ, mais si le script change de répertoire en interne ou si vous devez confirmer ce qu'une commande particulière voit, affichez le chemin pendant l'exécution. Une commande shell comme cd à l'intérieur du script peut modifier le répertoire pour les commandes qui la suivent, le dossier du package seul peut donc ne pas tout révéler.
3. Afficher le répertoire depuis l'intérieur du script
La vérification la plus claire consiste à ajouter temporairement pwd au début de la commande du script dans package.json. Par exemple, remplacez :
"build": "node build.js"
par :
"build": "pwd && node build.js"
Exécutez ensuite le script comme d'habitude :
npm run build
Le chemin affiché avant la commande de build est le répertoire de travail du shell à cet instant. Ce diagnostic utilise &&, de sorte que node build.js ne s'exécute que si pwd réussit. Après vérification, supprimez le préfixe de diagnostic et restaurez la commande d'origine. Relisez le fichier avant d'enregistrer si le script initial utilise déjà des opérateurs shell, des guillemets ou une commande wrapper ; veillez à préserver l'ordre et la syntaxe prévus.
Si le script est un fichier Node.js et que vous pouvez le modifier, une autre vérification directe consiste à ajouter temporairement console.log(process.cwd()) près de son début. La documentation de Node décrit process.cwd() comme le répertoire de travail actuel du processus Node.js. Cela indique le répertoire vu par Node au moment où la ligne s'exécute ; si le programme modifie ensuite son répertoire de travail, la valeur peut changer.
4. Lire le résultat et prendre en compte les workspaces
Comparez le chemin affiché avec celui indiqué par pwd avant d'avoir exécuté npm. Ils peuvent être différents : le répertoire de script de npm est la racine du package, tandis que votre répertoire Terminal est l'endroit où vous avez lancé la commande. Par exemple, si votre Terminal s'ouvre à la racine d'un dépôt mais que vous exécutez un script défini par un package situé sous packages/site, le contexte de package du script peut être ce workspace. npm documente la sélection d'un workspace à l'aide de --workspace ; vous pouvez également exécuter un script depuis l'intérieur du répertoire du workspace.
npm run build --workspace=site
Utilisez le nom ou le chemin du workspace qui correspond à la configuration workspaces du projet. Si la sortie est inattendue, confirmez que vous avez sélectionné le bon script et le bon workspace, puis vérifiez si le script lui-même contient un cd ou appelle un autre outil qui modifie les répertoires. Un processus enfant peut également avoir sa propre configuration de répertoire de travail ; inspectez la configuration de cet outil si son comportement diffère de celui du script parent.
Ce que vous indique INIT_CWD
npm fournit INIT_CWD pour désigner le répertoire dans lequel vous vous trouviez lorsque vous avez lancé npm run. Cette valeur peut être utile lorsqu'un script a besoin de savoir d'où l'appelant est parti, mais ce n'est pas le répertoire de travail actuel du script. Utilisez pwd dans le script shell ou process.cwd() dans Node.js pour inspecter le répertoire vu par le processus en cours d'exécution. La distinction est particulièrement utile lorsqu'un chemin de fichier relatif fonctionne depuis un emplacement d'appel mais pas depuis un autre.
Pour un diagnostic rapide, commencez par la règle de racine de package de npm, sélectionnez le workspace prévu si nécessaire, et affichez pwd à l'intérieur du script pour confirmer le chemin réel à l'endroit précis où il s'exécute.
Sources
Scripts — npm Docs
Workspaces — npm Docs
Process — Node.js
Exécuter des commandes et des outils dans Terminal sur Mac — Assistance Apple
Modifier le shell par défaut dans Terminal sur Mac — Assistance Apple