Як я можу встановити NODE_ENV = виробництво в Windows?


340

В Ubuntu це досить просто; Я можу запустити програму, використовуючи:

$ NODE_ENV=production node myapp/app.js

Однак це не працює в Windows. Чи є файл конфігурації, де я можу встановити атрибут?


Для вирішення мультиплатформенной ви можете знайти відповідь stackoverflow.com/a/57509175/11127383
Daniel Danielecki

Відповіді:


485

Поточні версії Windows використовують Powershell як оболонку за замовчуванням, тому використовуйте:

$env:NODE_ENV="production"

Відповідь Пер @ jsalonen нижче. Якщо ви знаходитесь в CMD (який більше не підтримується), використовуйте

set NODE_ENV=production

Це слід виконати в командному рядку, де ви плануєте запустити свою програму Node.js.

Вищенаведений рядок буде встановлювати змінну середовища NODE_ENV для командного рядка, де ви виконуєте команду.

Щоб встановити змінні середовища в усьому світі, щоб вони зберігалися за винятком лише одного командного рядка, ви можете знайти інструмент із системи на панелі керування (або ввівши "середовище" в поле пошуку в меню "Пуск").


112
Для тих , хто ще бореться з цим: set NODE_ENV=production && node app. Більш зручно налаштувати ваш package.jsonвідповідно: "scripts": { "start": "set NODE_ENV=production && node app" }.
Amberlamps

5
@ShuruiLiu команда нічого не виведе, але ви можете ввести, echo %NODE_ENV%щоб перевірити її поточне значення.
Jani Hartikainen

169
Heads up: "set NODE_ENV = виробництво &&" додає проміжний простір до змінної. Мені потрібно було "встановити NODE_ENV = виробництво &&", щоб уникнути додаткового простору, який порушує вузлові додатки, як Ghost.
світанок

12
@Amberlamps, що не є гарним рішенням, оскільки NODE_ENV тоді просто кодований для всіх машин; реальна мета - змінити env машиною за допомогою змінної env або передати значення в командному рядку, а не жорстко вводити його у файл package.json.
Олександр Міллс

6
Я думаю, що використання cross-envкращого рішення цієї проблеми, якщо ваша команда працює на змішаних операційних системах. Відповідь на @MoOx мій вибір, як відповідь на це питання.
філк

230

Щойно я знайшов хороший пакет Node.js, який може багато допомогти визначити змінні середовища, використовуючи унікальний синтаксис, крос-платформу.

https://www.npmjs.com/package/cross-env

Це дозволяє вам написати щось подібне:

cross-env NODE_ENV=production my-command

Що досить зручно! Більше немає специфічних команд для Windows або Unix!


25
Поки перша відповідь вірна. Я думаю, що ця відповідь є найбільш достовірною і її слід використовувати
d4rklit3

Це чудове рішення!
Кирило Гусятин

Просто і ідеально вирішує мою проблему. Я зміг побудувати лише на Linux. Це вирішило і Linux, і Windows.
tista3

Ця відповідь заслуговує на більшу любов, має бути прийнятою :)
Honza Kalfus

Це найкраща відповідь і для мене
knaos

166

В PowerShell:

$env:NODE_ENV="production"

4
ps: не забудьте $ та котирування;)
Джордж

6
set NODE_ENV=productionне працював для мене в силі, але це було. Дякую!
лють

6
Трохи потрудився, щоб це працювало від Powershell в коді Visual Studio. Думав, що я залишу рішення тут. Я намагався запустити команду "Gulp", забезпечивши правильне значення env. Це те , що завівся працює для мене: $env:NODE_ENV="development"; gulp runMytask. Зверніть увагу на напівколонку. Файл gulp може використовувати умовну логіку для process.env.NODE_ENV. Якщо ви не встановите її, вона буде невизначена.
dvsoukup

2
Тільки це рішення працює для мене з Windows 10 та webpack 3.8.1
Роман Арсеньев

1
Це працює ідеально. Але cross-env NODE_ENV=productionваріант є дійсно кращим рішенням, якщо запускати npm команди з package.json, які вимагають встановити env. Занадто просто залишати програму env у програмі dev / prod після використання опції $ env: NODE_ENV
Дреней

105

Було б ідеально, якби ви могли встановити параметри на тій же лінії, що і ваш дзвінок, щоб запустити Node.js в Windows. Погляньте на наступне уважно та виконайте його так, як зазначено:

У вас є два варіанти:

  1. У командному рядку:

    set NODE_ENV=production&&npm start

    або

    set NODE_ENV=production&&node index.js
  2. Трюк для роботи в ОС Windows полягає в тому, що вам потрібно видалити пробіл до та після &&. Налаштуйте файл package.json із start_windows (див. Нижче) нижче. Потім запустіть "npm run start_windows" у командному рядку.

    //package.json
    
    "scripts": {
      "start": "node index.js"
      "start_windows": "set NODE_ENV=production&&node index.js"
    }
    

1
DEF хотів би знати, як змусити його працювати таким чином.
SC_Chupacabra

2
Працювали для мене. Довелося видалити пробіл, хоча "встановити NODE_ENV = виробництво && nodemon server.js"
SC_Chupacabra

2
Хотілося б, щоб я прочитав це так далеко, перш ніж спробувати відповідь вище, врятував би мене деякий час. : \
Jeff

1
У неяскраво пов'язаній ноті я виявив, що && не працює, як очікувалося, у Windows, коли зв'язували кілька команд разом. Якщо ви сумніваєтесь, спробуйте скористатися | натомість
Майк

1
це працювало для мене на Windows 10 64-бітній машині як від cmd, так і від power-shell
Ані

30

Можна використовувати

npm run env NODE_ENV=production

Це, мабуть, найкращий спосіб зробити це, оскільки він сумісний і в Windows, і в Unix.

З документації npm run-script :

Сценарій env - це спеціальна вбудована команда, за допомогою якої можна перераховувати змінні середовища, які будуть доступні сценарію під час виконання. Якщо у вашому пакеті визначена команда "env", вона матиме перевагу над вбудованою.


3
Як ми можемо виконати іншу команду із набором змінної? Це, здається, не працює: npm run env NODE_ENV = виробництво && echo $ NODE_ENV. Напевно, вони виконані у двох різних снарядах?
Йонас Келло

1
Як я бачу, це зовсім не працює. Від самих документів він перераховує лише змінні середовища, а не їх встановлення.
кумархарш

2
Не працює для мене. У ньому перераховано значення vars, покажіть вказаний вами var, але під час виконання, var не в
порядку.env.YOUR_VAR

3
@JonasKello Ви могли б використовувати це: є обов'язковим . Замініть будь-яку команду, яку ви хочете. npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'--node -e 'console.log(process.env.NODE_ENV)'
Паан

Спробував це за допомогою цієї команди: npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.jsі ... нічого не сталося. Я не впевнений, що цей метод працює на Windows.
jcollum

14

Якщо ви використовуєте Visual Studio з NTVS, ви можете встановити змінні середовища на сторінці властивостей проекту:

Властивості проекту Visual Studio NTVS

Як ви бачите, спадні меню "Конфігурація" та "Платформа" вимкнено (я не надто розглядав, чому це так), але якщо ви редагуєте .njsprojфайл так:

  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DebugSymbols>true</DebugSymbols>
    <Environment>NODE_ENV=development</Environment>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DebugSymbols>true</DebugSymbols>
    <Environment>NODE_ENV=production</Environment>
  </PropertyGroup>

Спадне меню "Налагодження / випуск" потім контролюватиме встановлення змінної перед запуском Node.js.


12

Я написав модуль win-node-env, за допомогою якого ви можете запустити свою команду так само, як і в * nix.

NODE_ENV=production node myapp/app.js

Він працює, створюючи NODE_ENV.cmdкоманду a, яка встановлює NODE_ENVзмінну середовища і породжує дочірній процес з рештою команди та її аргументів.

Просто встановіть його (у всьому світі) і запустіть свої команди сценаріїв npm, це повинно автоматично змусити їх працювати.

npm install -g win-node-env

саме те, що я шукав! запускати сценарії npm, і це навіть працює з іншими інструментами cli cli, як жарт. Тож "встановити NODE_ENV = налагоджувати & cls & vice ..." став "cls & NODE_ENV = debug jest"
Z. Khullah

9

Мій досвід використання Node.js у Windows 7 64-розрядному в Visual Studio 2013 - це те, що вам потрібно використовувати

setx NODE_ENV development

з вікна cmd. І вам доведеться перезапустити Visual Studio, щоб розпізнати нове значення.

Набір синтаксису триває лише протягом тривалості вікна cmd, в якому він встановлений.

Простий тест у Node.js:

console.log('process.env.NODE_ENV = ' + process.env.NODE_ENV);

Він повертає 'undefined' при використанні набору, і повертає 'development', якщо використовувати setx та перезапускати Visual Studio.


cmd- не повноваження? Фу, давай на вікна, збери разом.
jcollum

ваше зауваження про перезапуск VS-коду було дуже корисним!
Юрій Козлов

8

Ось метод без командного рядка:

У Windows 7 або 10 введіть середовище у вікно пошуку меню «Пуск» та виберіть Редагувати змінні системного середовища.

Крім того, перейдіть до Панелі управління \ Система та безпека \ Система та натисніть Розширені налаштування системи

Це має відкрити діалогове вікно "Властивості системи", вибравши вкладку "Додаткові". Унизу ви побачите кнопку Змінні середовища ... Натисніть це.

Діалогове вікно системи

Відкриється діалогове вікно змінних довкілля.

Діалогове вікно змінної середовища

Унизу, під системними змінними, виберіть команду Створити ... Це відкриє діалогове вікно Нова системна змінна.

введіть тут опис зображення

Введіть ім'я та значення змінної та натисніть кнопку ОК.

Вам потрібно буде закрити всі підказки cmd і перезапустити сервер, щоб нова змінна була доступна для Process.env. Якщо вона все ще не з’являється, перезавантажте машину.


2
Дякую! Я все це зробив, але він не працював, поки не перезапустив сервер.
Марсель

7

Просто для уточнення та для всіх, хто може витягнути волосся ...

Якщо ви використовуєте git bash в Windows , set node_env=production&& node whatever.js схоже , це не працює . Замість цього використовуйте нативну cmd. Потім, використовуючи set node_env=production&& node whatever.jsроботи, як очікувалося.

Мій випадок використання:

Я розвиваюся в Windows, тому що мій робочий процес відбувається набагато швидше, але мені потрібно було переконатися, що середнє програмне забезпечення, яке стосується розробки мого додатка, не спрацьовує у виробничих умовах.


6

Щоб запустити свою програму в PowerShell (оскільки &&це заборонено):

($env:NODE_ENV="production") -and (node myapp/app.js)

Зауважте, що подання тексту того, що робить сервер, придушене, і я не впевнений, чи можна це виправити. (Розгортається на відповідь @ jsalonen.)


Мені це не вийшло:"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
Евандро Поматті,

4

Перший за типом силових оболонок

$env:NODE_ENV="production"

потім введіть

node fileName.js

Він буде чудово відображати всі виходи.


2

Для декількох змінних середовищ .envфайл зручніше:

# .env.example, committed to repo
DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3
# .env, private, .gitignore it
DB_HOST=real-hostname.example.com
DB_USER=real-user-name
DB_PASS=REAL_PASSWORD

Його легко використовувати dotenv-safe:

  1. Встановити за допомогою npm install --save dotenv-safe.
  2. Включіть його у свій код (найкраще на початку index.js) та безпосередньо використовуйте його за допомогою process.envкоманди :
require('dotenv').load()
console.log(process.env.DB_HOST)   

Не забудьте проігнорувати .envфайл у своєму VCS .

Тоді ваша програма швидко виходить з ладу, якщо змінна "визначена" в .env.exampleне встановлена ​​як змінна середовище, так і в .env.


Файли.
coiso

@coiso Без загального, загального місця, куди можна розмістити багато змінних env? Або у файлі сценарію, або в налаштуваннях, що залежать від IDE, ви ще більше пов'язані з певними інструментами. Думаю, це ще більше ускладнює інтеграцію нових членів команди.
Домінік

2

У випадку, якщо ви використовуєте термінал GITBASH "set NODE_ENV=production" не буде працювати, ви можете ввести "експортувати"NODE_ENV=production"


0

це не встановить змінну, але це корисно у багатьох випадках. Я не рекомендую використовувати це для виробництва, але це буде добре, якщо ви граєте з npm.

npm install --production

0

Я використовував сценарій npm для запуску завдань із глоткою без "&&"

NODE_ENV = тестові корпуси npm запускають насіння-db


0

Перезапустіть код VS, якщо NODE_ENV або будь-яка інша змінна середовище не дає правильного значення. Це повинно працювати після перезавантаження.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.