Как я могу передать NODE_ENV
в команду npm run
в качестве параметра?
Пример файла package.json
:
NODE_ENV=8080
...
"script": {
"start": "http-server --port $NODE_ENV" // or something similar that
}
...
Обратите внимание, что NODE_ENV
устанавливается другим процессом, из него можно прочитать только npm run
.
Я столкнулся с этой проблемой при развертывании моего приложения в героку (они автоматически установят NODE_ENV
). Я нашел другое решение этой проблемы на героку, но я все еще хочу знать, есть ли способ передать NODE_ENV
в команду npm run
.
Вы пытаетесь принять значение внутри строки в двойных кавычках, что неверно. Вы можете получить доступ следующими способами:
Опция 1: Вам нужно объединить две строки.
NODE_ENV=8080
"script": {
"start": "http-server --port "+NODE_ENV
}
Вариант 2: Вы можете использовать литералы шаблонов
NODE_ENV=8080
"script": {
"start": `http-server --port ${NODE_ENV}`
}
В варианте 2 NODE_ENV будет заменено фактическим значением переменной.
Обратите внимание, что это файл package.json
, а не файл javascript, поэтому вы не можете писать здесь код javascript. Таким образом, либо конкатная строка, либо шаблонные литералы не работают.
Вы добавили NODE_ENV в переменные среды? Поскольку структура одинакова, я пробовал с разными переменными
Переменные среды можно использовать напрямую, как вы пытались сделать:
{
"scripts": {
"start": "echo $FOO"
}
}
yarn start
и npm run start
будут отображать значение переменной среды FOO
, если вы запустите этот стартовый скрипт. Я думаю, у вас есть две другие проблемы.
Во-первых, вы пытаетесь использовать переменную среды NODE_ENV
, чтобы установить порт, который слушает ваше приложение. Heroku предоставляет это значение через переменную среды PORT , а не NODE_ENV
. NODE_ENV будет содержать что-то вроде продакшена.
Во-вторых, вы пытаетесь установить переменную среды в файле package.json
. Это возможно, но это переопределит значение, установленное Heroku. Вместо этого рассмотрите возможность использования файла .env
в разработке. Его содержимое может выглядеть примерно так:
PORT=8080
Вам понадобятся инструменты для загрузки этого файла и заполнения вашей среды. dotenv — популярный выбор. Обратите внимание, что ваш файл .env
не должен быть зафиксирован, поэтому подумайте о том, чтобы добавить его в свой .gitignore
.
Существуют и другие методы для установки переменных среды в вашей среде разработки, и любой из них будет работать, если вы предпочитаете.
Собрав все это вместе, ваш package.json
должен содержать что-то вроде
{
"scripts": {
"start": "http-server --port $PORT"
}
}
Моя ошибка заключалась в том, что я думаю, что значение порта установлено $NODE_ENV
вместо $PORT
. Поэтому использование "http-server --port $PORT"
вместо "http-server --port $NODE_ENV"
решит мою проблему. Спасибо.
Принятие любого инструмента? Есть ли проблема с использованием стороннего инструмента?