Можно ли ввести параметр NODE_ENV в файл sass, используя Webpack & sass loader?
Я пытаюсь внедрить NODE_ENV в файл sass, чтобы у меня был другой вывод для dev/prod env, и у меня была функция sass с таким условием:@if (NODE_ENV == 'prod') {}
мой webpack.config выглядит так:
module: {
loaders: [{
test: /\.scss$/,
loader: "style-loader!raw-loader!sass-loader?includePaths[]=" + path.resolve(__dirname, "./node_modules/compass-mixins/lib")
}]
}
Я попытался передать параметр данных загрузчику, но все, что я пытался, сработало. буду признателен за любую помощь!
2 ответа
Это код непосредственно из репозитория sass-loader.
webpack.config.js
...
sassLoader: {
data: "$env: " + process.env.NODE_ENV + ";"
}
...
Вы можете попробовать prependData
вариант для sass-loader
{
loader: 'sass-loader',
options: {
prependData: '$env: ' + process.env.NODE_ENV + ';',
}
}
prependData
также принимает function
который получает loaderContext
с помощью которого вы можете сделать его более динамичным. Как только вы это реализовали; Вы можете:
@if ($env == 'prod') {}
Дополнительная информация здесь: https://webpack.js.org/loaders/sass-loader/
Удачи...
Взглянул на sass-loader
источник, и он, кажется, не поддерживает какие-либо параметры, которые позволят вам вставить переменную - так что это будет невозможно.
Я не думаю, что вы сможете "вставить" переменную env/build-time в ваш Sass, как это, но вы можете получить такое же поведение, создав несколько файлов Sass и требуя тот, который вам нужен (из вашего js-источника).) на основе условия. Обратите внимание, что веб-пакет имеет ограниченные возможности для анализа логики в вашем коде, однако - если вы хотите require
что-то внутри условного, условное должно проверять логическое значение, чтобы оно работало. Так что если вы делаете if (NODE_ENV === 'production') {...} else {...}
Webpack будет обрабатывать все требования при всех этих условиях. Если вы сделали что-то вроде if (IS_PROD_ENV) {...} else {...}
где условное значение является логическим, webpack будет следовать условной логике и обрабатывать только правильные require
, UglifyJS
Плагин удалит ненужные вам условные ветки.