Для використання в середовищі express.js. Будь-які пропозиції?
Для використання в середовищі express.js. Будь-які пропозиції?
Відповіді:
Перш ніж запустити додаток, це можна зробити в консолі,
export NODE_ENV=production
Або якщо ви знаходитесь у Windows, ви можете спробувати це:
SET NODE_ENV=production
або ви можете запустити додаток так:
NODE_ENV=production node app.js
Ви також можете встановити його у вашому js-файлі:
process.env.NODE_ENV = 'production';
Але я не пропоную це робити у вашому файлі виконання, оскільки відкрити VIM на своєму сервері та змінити його на виробництво непросто. Ви можете створити файл config.json у своєму каталозі, і кожен раз, коли ваша програма запускається, вона читає з неї та встановлює конфігурацію.
process.env.NODE_ENV
надійно від самого додатка. Найкраще встановити змінну вашого середовища належним чином, як Даніель посилається нижче.
NODE_ENV
явного налаштування кожного разу, коли ви запускаєте додаток, як у другому прикладі ( NODE_ENV=production node app.js
). Таким чином, ви потенційно можете вберегти себе від майбутнього підтягування волосся у випадку, якщо ви забудете встановити місцеве місце NODE_ENV
назад development
.
cross-env NODE_ENV=production
працює на windows та linux / mac.
NODE_ENV=production forever app.js
повинен працювати.
в package.json:
{
...
"scripts": {
"start": "NODE_ENV=production node ./app"
}
...
}
потім запустіть у терміналі:
npm start
NODE_ENV=production
в package.json не має особливого сенсу. Запуск npm start
в розвитку буде запустити його у виробництво. Ви можете так само написати свій код, як ніби це завжди виробництво, оскільки ви завжди керуєте ним таким чином. Я вважаю, що це змушує інших модулів (наприклад, Express) працювати в режимі виробництва. Навіщо взагалі використовувати змінні середовища, якщо вони ніколи не змінюються?
Тут ніхто ще не згадував .env
? Створіть .env
файл у корені програми, а потім require('dotenv').config()
прочитайте значення. Легко змінюється, легко читається, кросова платформа.
"mode": "production"
у .env
файлі спрацювало.
export NODE_ENV=production
це погане рішення, воно зникає після перезавантаження.
якщо ви більше не хочете турбуватися про цю змінну - додайте її до цього файлу:
/etc/environment
не використовуйте синтаксис експорту, просто напишіть (у новому рядку, якщо якийсь вміст уже є):
NODE_ENV=production
він працює після перезавантаження. Вам більше не доведеться повторно вводити експорт NODE_ENV = команда виробництва і просто використовувати вузол із усім, що вам завгодно - назавжди, pm2 ...
Для heroku:
heroku config:set NODE_ENV="production"
що насправді за замовчуванням.
NODE_ENV=production gulp bundle-production-app
для створення готового сценарію для виробництва, на сервері NODE_ENV знаходиться в середовищі сервера, а в машині розробників його немає. У деяких машинах це кошмар, якщо він не встановлений, і ви очікуєте, що він буде встановлений завжди . У деяких ви очікуєте, що цього не буде, тому не додаєте. У будь-якому разі, роблячи користувальницькі інтерфейси, я даю зрозуміти, чи перебуває він у режимі розробки, тому у вас ніколи не виникає питання, увімкнено чи вимкнено. Якщо NODE_ENV є! == виробництво, то за вашим обличчям ви перебуваєте в іншому режимі, тож зовсім не кошмар. Все ясно, все добре.
/etc/environment
та запустити export NODE_ENV=production
?
Щоб не турбуватися, чи встановлюєте ви сценарії в Windows, Mac або Linux, встановіть пакет cross-env . Тоді ви можете легко використовувати свої сценарії, як-от так:
"scripts": {
"start-dev": "cross-env NODE_ENV=development nodemon --exec babel-node -- src/index.js",
"start-prod": "cross-env NODE_ENV=production nodemon --exec babel-node -- src/index.js"
}
Масивні реквізити розробникам цього пакету.
npm install --save-dev cross-env
heroku config:set NODE_ENV="production"
NODE_ENV=production
тепер за замовчуванням в Heroku node.js розгортається.
Для Windows Powershell використовуйте цю команду
$env:NODE_ENV="production" ; node app.js
На OSX я рекомендую додати export NODE_ENV=development
до свого ~/.bash_profile
та / або ~/.bashrc
та / або ~/.profile
.
Особисто я додаю цей запис до свого, ~/.bashrc
а потім ~/.bash_profile
~/.profile
імпортую вміст цього файлу, тож він узгоджується в різних середовищах.
Після внесення цих доповнень не забудьте перезапустити свій термінал, щоб вибрати налаштування.
Якщо ви на вікнах. Відкрийте свою cmd в правій папці, а потім спочатку
set node_env={your env name here}
натисніть клавішу Enter, тоді ви можете запустити свій вузол
node app.js
це розпочнеться з вашого налаштування env
Щоб мати декілька середовищ, вам потрібні всі відповіді раніше (параметр NODE_ENV та експортувати його), але я використовую дуже простий підхід без необхідності нічого встановлювати. У свій package.json просто покладіть сценарій для кожної програми, яка вам потрібна, наприклад:
...
"scripts": {
"start-dev": "export NODE_ENV=dev && ts-node-dev --respawn --transpileOnly ./src/app.ts",
"start-prod": "export NODE_ENV=prod && ts-node-dev --respawn --transpileOnly ./src/app.ts"
}
...
Потім, щоб запустити додаток, а не npm start
використовуватиnpm run script-prod
.
У коді можна отримати доступ до поточного середовища process.env.NODE_ENV
.
Вуаля.
Windows CMD -> set NODE_ENV=production
Windows Powershell -> $env:NODE_ENV="production"
MAC -> export NODE_ENV=production
Даніель має фантастичну відповідь, який є кращим підходом до правильного процесу розгортання (встановити та забути).
Для тих, хто використовує експрес. Ви можете використовувати grunt-express-сервер, який також фантастично. https://www.npmjs.org/package/grunt-express-server
Це може бути ймовірність, що ви зробили два екземпляри об'єкта секвелювання
наприклад: var con1 = new Sequelize (); var con2 = new Sequelize ();
ніж також відбудеться та сама помилка