2016-11-07 3 views
2

У меня есть an issue с веб-пакетом в производстве, и я запутался в различных способах запуска webpack в рабочей среде (я использую Windows) ,Webpack: -p vs NODE_ENV = production vs process.env.NODE_ENV

Может кто-то объяснить разницу между этими:

One: CLI

  • webpack -p

Два: CLI

  • SET NODE_ENV=production
  • webpack

Три: webpack.config.js

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

Я использую React и нужно построить серийную версию, которая одновременно минимизированы и включает в себя производственную версию React.

ответ

3

SET NODE_ENV=production устанавливает переменную окружения NODE_ENV в «production» на сервере. Машина, которая компилирует и связывает ваши исходные файлы javascript. Таким образом, он может, например, выбрать другой файл конфигурации webpack для производства.

Но эта переменная окружения не действует, когда этот код javascript действительно работает. Потому что код javascript будет работать в браузере на другой машине.

providePlugin помогает установить переменную NODE_ENV в браузере. Где работает ваш javascript. Фактически то, что он действительно делает, заменяет вхождения process.env.NODE_ENV с "production" вместо установки переменной. Но эффекты одинаковы.

EDIT: Это фактически DefinePlugin, который должен использоваться для этой цели.

Weback -p рекламирует выполнение второго, но, похоже, имеет some issues.

0

основе webpack documentation заходящего webpack -p выполняет следующие

  • минификация с использованием UglifyJSPlugin
  • Запускает LoaderOptionsPlugin
  • Устанавливает переменную окружения Node

Так вместо делать:

"scripts": { 
    "dist": "NODE_ENV=production webpack", 
    "start": "webpack" 
} 

Вы можете просто указать

"scripts": { 
    "dist": "webpack -p", 
    "start": "webpack" 
} 
Смежные вопросы