Для достижения динамического объединения по переменным окружения, вы должны обернуть операторы require
в условные блоки, которые будут определены как «мертвый код» или нет.
Затем, во время сборки, этот оператор require
будетбыть удаленным, что приведет к исключению из окончательного пакета.
Предикат каждого условного блока должен оцениваться как логическое значение во время сборки.Это может произойти, только если предикат представляет собой простое сравнение между двумя примитивными значениями или чисто логическим значением.Например:
// webpack.config.json
new DefinePlugin({
"process.env.component_a": "true",
"process.env.component_b": "false",
"process.env.component_c": "'true'",
})
// in application:
if (process.env.component_a) {
const a = require('./a') // will be included
}
if (process.env.component_b) {
const b = require('./b') // will be excluded
}
if (process.env.component_c === "true") {
const c = require('./c') // will be included
}
Важное примечание
Недостаточно оставить значение undefined недостаточно для исключения модуля из окончательного комплекта.
/* THE WRONG WAY */
// webpack.config.json
new DefinePlugin({
"process.env.component_a": "true",
})
// in application:
if (process.env.component_a) {
const a = require('./a') // will be included
}
if (process.env.component_b) {
// even though this block is unreachable, b will be included in the bundle!
const b = require('./b')
}