Webpack: различные (Define Plugin) настройки для каждой точки входа
Для некоторых моих файлов пакетов я хотел бы создавать разные версии (например, один с функциональностью администратора и без него).
Кажется, что DefinePlugin обычно используется для такого рода вещей, но есть также такие загрузчики, как if-loader или ifdef-loader.
Теперь проблема в том, что все они, похоже, имеют конфигурацию среди всех точек входа. Мне нужно было бы установить другую конфигурацию (например, {with_admin_mode: true}
и {with_admin_mode: false}
) для разных точек входа.
Хотя я поставил конфигурацию в верхней части фактических JS файлов точки входа, но я не знаю, как правильно создать глобальную переменную во всех модулях, которые будут обнаружены как true == false
и удалены.
Ответы
Ответ 1
Попробуйте взглянуть на webpack-merge - Smart Merging должна помочь вам решить ваше дело.
Это может помочь в создании динамической конфигурации с конкретными точками входа, плагинами, и то, что вы когда-либо захотите, зависит от некоторой переменной env.
Хорошая практика - разбивать конфигурацию на разные файлы. Вы можете сделать некоторые общие настройки с одинаковыми вещами через все точки входа, например, загрузчики, а затем сделать пользовательские конфигурации для with_admin_mode
и without_admin_node
.
Ответ 2
Извините, я хотел написать offerPlugin, а не definePlugin. DefinePlugin заменит переменную в вашем коде напрямую и не будет создавать глобальную.
Вы можете использовать securityPlugin для установки глобальной переменной конфигурации из созданного вами файла модуля:
в конфигурации вашего веб-пакета:
plugins: [
new webpack.ProvidePlugin({
'config': 'config'
})
...
],
resolve: {
alias: { 'config': path.resolve(__dirname, './config') },
extensions: ['.js']
}
и config
будут установлены как глобальные для экспорта файла config.js
.
Затем вы можете получить доступ к этому глобальному и изменить его в разных точках входа. Например, вы можете сделать config.with_admin_mode = true;
в entry1.js и config.with_admin_mode = false;
в entry2.js.
Другим решением было бы установить глобальную переменную в окне непосредственно из ваших модулей, например. window.with_admin_mode = true;