"NODE_ENV" n'est pas reconnu comme une commande interne ou externe, une commande exploitable ou un fichier de commandes

208

J'essaie de configurer un environnement pour une application Node.js. mais je reçois cette erreur à chaque fois.

"NODE_ENV" n'est pas reconnu comme une commande interne ou externe, une commande exploitable ou un fichier de commandes.

Qu'est-ce que cela signifie et comment puis-je résoudre ce problème?

J'utilise Windows et j'ai également essayé, set NODE_ENV=developmentmais je n'ai pas eu de chance.

krozero
la source

Réponses:

273

Il semble que votre erreur provienne d'une tentative d'exécution de quelque chose comme ça (qui fonctionne sous Linux)

NODE_ENV=development node foo.js

l'équivalent dans Windows serait

SET NODE_ENV=development
node foo.js

fonctionnant dans le même shell de commande. Vous avez mentionné que l'ensemble NODE_ENV ne fonctionnait pas, mais vous ne savez pas comment / quand vous l'avez exécuté.

Jim O'Neil
la source
merci Jim, je l'ai utilisé en ligne de commande et supprimé du fichier package.json. mais je suis tombé sur un autre après ça. il semble que les modules de nœuds ne soient pas entièrement pris en charge par Windows. a obtenu une autre erreur avec bcrypt et gyp.
krozero
pas un expert ici, mais bcrypt montre le support pour Windows, mais nécessite openSSL, je ne sais pas si cela aide. Sinon, vous voudrez peut-être publier une nouvelle question car le scénario a un peu changé.
Jim O'Neil
5
Bien que cela fonctionne, je pense que @ Susan-stack a donné la bonne réponse - une solution multiplateforme et ne pas changer la ligne pour fonctionner sur Windows mais casser d'autres systèmes d'exploitation.
justabuzz
a voté pour la réponse de Susan - la réponse originale était antérieure au module cross-env
Jim O'Neil
251

J'ai écrit un module pour cela: win-node-env .

Il crée un NODE_ENV.cmdqui définit la NODE_ENVvariable d'environnement et génère un processus enfant avec le reste de la commande et ses arguments.

Il suffit de l'installer (globalement) et d'exécuter vos commandes de script npm, cela devrait automatiquement les faire fonctionner.

npm install -g win-node-env
laggingreflex
la source
13
Ça marche! Et je n'ai eu à changer aucune commande. Telle est la réponse.
Abhimanyu Pathania
3
c'est la
réponse
1
Comment puis-je ajouter des variables personnalisées à votre script?
ivan-ivory
1
@ ivan-ivory La première variable (ie NODE_ENV) doit rester la même (sinon elle devra être un script entièrement séparé). Et quant à l'ajout de variables personnalisées après cela (ie NODE_ENV = dev SOME_VAR = val), je vais devoir modifier la logique du script pour analyser plus de variables de process.argv. J'y ai réfléchi mais je n'ai pas le temps. N'hésitez pas à faire une demande de pull.
laggingreflex
1
Ça n'a pas marché pour moi. Je reçois:> NODE_ENV = développement node_modules / .bin / nodemon --ignore ./public/tones/ --exec babel-node server / index.js 'node_modules' n'est pas reconnu comme une commande interne ou externe, un programme exploitable ou fichier batch.
Rod Lima
173

pour les fenêtres, utilisez &également la commande entre. Comme,

  "scripts": {
    "start": "SET NODE_ENV=development & nodemon app/app.js",
  }
Mahmudul Hasan
la source
7
La commande fonctionne mais la valeur de NODE_ENVsera 'development' (l'espace blanc entre 't' et '&' sera contenu par NODE_ENV)
roroinpho21
1
exactement ce que dit @ roroinpho21. maintenant je dois .trim()la valeur plus tard pour faire du process.env.NODE_ENV == 'production'travail. Quoi qu'il en soit pour éviter cela dans un oneliner?
Flion
Des gens qui ne pouvaient pas le faire fonctionner, "test-unit": "SET NODE_ENV=test & mocha --require co-mocha 'test.js'" faux "test-unit": "SET NODE_ENV=test & mocha --require co-mocha test.js" vrai . Vous devez supprimer ' ' autour du fichier js.
Serhat Türkman
Cela fait exactement ce que vous voulez si vous essayez d'exécuter npm start pour définir le mode de production sur production.
Jason
90
  1. npm install "cross-env" module.
  2. modifier le code comme cross-env NODE_ENV=development node foo.js. Ensuite, vous pouvez exécuter le même npm run build.
Susan-stack
la source
10
N'oubliez pas d'inclure cross-envles dépendances danspackage.json
Aminah Nuraini
1
cross-env meilleure réponse!
Williaan Lopes du
La bibliothèque est ici: github.com/kentcdodds/cross-env - et cette page dit d'inclure cross-dev dans devDependencies npm install --save-dev cross-env; cela aide également à l'erreur 'env' is not recognized as an internal or external commandlorsque le script npm a dit env VARNAME=varvalue && ...(supprimez simplement env et insérez cross-env à la place). Pas besoin pour les développeurs d'installer quelque chose dans le monde ou d'avoir différents scripts npm pour différentes plates-formes!
Marcus
47

Utilisez win-node-env , pour l'utiliser, exécutez simplement la commande ci-dessous sur votre cmdou power shellou git bash:

npm install -g win-node-env

Après cela, tout est comme Linux.

AmerllicA
la source
27
set NODE_ENV=production & nodemon app/app.js

fera que NODE_ENV contiendra un espace à la fin:

process.env.NODE_ENV == 'production'; //false
process.env.NODE_ENV == 'production '; //true

Comme mentionné dans un commentaire ici , utilisez-le à la place:

NODE_ENV=production&& nodemon app/app.js
Flion
la source
13

Changer vos scripts pour accueillir Windows est une douleur royale. Essayer de comprendre les traductions Windows appropriées et de maintenir 2 ensembles de scripts n'est pas un moyen de vivre votre vie.

Il est beaucoup plus facile de configurer npm pour utiliser bash sous Windows et vos scripts s'exécuteront tels quels.

Courez simplement npm config set script-shell "C:\\Program Files\\Git\\bin\\bash.exe". Assurez-vous que le chemin d'accès à l'exécutable bash est correct pour votre machine.Vous devrez probablement démarrer une nouvelle instance du terminal pour que la modification prenne effet.

La capture d'écran ci-dessous illustre l'avantage.

  1. npm ERR! lorsque vous essayez d'exécuter le script initialement.
  2. Le script modifié pour Windows utilise des exécutions mais n'affiche pas le message de retour.
  3. Après la mise à jour de la configuration de npm pour utiliser bash, le script s'exécute et renvoie le message approprié.

Obtention des scripts npm à exécuter tels quels dans Windows

Jon Crowell
la source
7

Pour ceux qui utilisent Git Bash et qui ont des problèmes avec npm run <script> ,

Il suffit de configurer npm pour utiliser Git Bash pour exécuter des scripts

npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe" (changez le chemin en fonction de votre installation)

Et puis npm exécutera des scripts avec Git Bash, donc de telles utilisations comme NODE_ENV=fonctionneront correctement.

user3790180
la source
4
npm install -S cross-env

Travaillé pour moi

Bang Andre
la source
2

Pour Windows, ouvrez Git Bash et essayez

NODE_ENV=production node app.js

Nikhil Arya
la source
1
Il fonctionne dans Git Bash (mintty) lorsqu'il est utilisé directement. Mais lorsque j'exécute la même commande depuis npm <scripts_entry>, j'obtiens une erreur avec un phrasé différent mais une signification équivalente: il traite le nom env var comme un exécutable.
Andrey Mikhaylov - lolmaus
2
@ AndreyMikhaylov-lolmaus npm run <script>utilise Windows cmd par défaut pour exécuter les commandes. Vous pouvez le configurer pour utiliser Git Bash. npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"Et puis npm runutilisera Git Bash pour exécuter des scripts.
user3790180
1

La plupart des réponses là-haut ne m'a pas aidé ..

Ce qui m'a aidé, c'est NODE_ENV=production&& nodemon app/app.js

Prenez note de l'espace. Bonne chance.

SirPhemmiey
la source
1

Si quelqu'un d'autre est venu ici comme moi, essayant de trouver une solution à l'erreur:

'env' is not recognized as an internal or external command

La raison pour laquelle j'ai obtenu cela est que je migrais une solution angulaire d'une machine de développement Mac vers un bureau Windows 10. C'est ainsi que je l'ai résolu.

  1. courir npm install --save-dev cross-env

  2. aller dans mon fichier package.json et changer toutes les références de script de env <whatever>àcross-env <whatever>

Ensuite, mes commandes comme: npm run start:some_random_environment_varfonctionnent désormais correctement sur Windows 10.

Helzgate
la source
Pour les utilisateurs de Windows, passer simplement à Bash est un peu difficile, surtout lorsque le reste fonctionne. C'est une bonne solution qui a fonctionné pour moi.
FuZZbaLL
0

process.env.NODE_ENV ajoute un espace blanc pour ce faire

process.env.NODE_ENV.trim() == 'production'
Hamza Abbasi
la source
0

Pour les fenêtres, vous pouvez le faire comme

"scripts": {
    "start:prod" : "SET NODE_ENV=production & nodemon app.js",
    "start:dev" : "SET NODE_ENV=development & nodemon app.js"
},
Husain Dhariwala
la source