Развертывание приложения в Heroku не работает, если используется вместе с DefinePlugin - PullRequest
0 голосов
/ 13 мая 2018

До сих пор я собирал свой пакет веб-пакетов вот так webpack -p и развертывал его в Heroku.Все отлично работало.Я хотел иметь немного больше контроля, поэтому вместо использования -p я использовал UglifyJsPlugin и DefinePlugin в моей конфигурации webpack, так как это именно то, что делает -p.Это где проблема началась.

Если я использую -p без DefinePlugin, вот так выглядит мой файл сборки в конце.

var PORT = process.env.NGINX_PORT ? '/tmp/nginx.socket' : process.env.PORT;

process.env.PORT поддерживается, и развертывание в Heroku работает.

Если я использую DefinePlugin

var PORT = Object({"NODE_ENV":"production"}).NGINX_PORT ? '/tmp/nginx.socket' : Object({"NODE_ENV":"production"}).PORT;

Мой process.env.PORT больше не существует, и развертывание в Heroku завершается неудачей.

Как я могу использовать DefinePlugin, но при этом сохраню process.env.PORT не поврежден?

Это моя конфигурация веб-пакета

new webpack.DefinePlugin({
      'process.env': {
        NODE_ENV: JSON.stringify(process.env.NODE_ENV),
      },
    }),

и мой стартовый скрипт

"start": "cross-env NODE_ENV=production node ./src/build/bundle.js"

1 Ответ

0 голосов
/ 13 мая 2018

Если вы хотите, чтобы process.env.PORT получал из env, просто измените способ использования плагина.

new webpack.DefinePlugin({
      'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV)
})

DefinePlugin переведет все, что вы положили в конструктор. Это случилось с вами, потому что вы только что имели process.env на верхнем уровне. Вы должны быть конкретны с тем, что вы хотите, чтобы это перевести.

...