2016-03-02 1 views
3

Я пытаюсь внедрить NODE_ENV в файл Sass, так что я могу иметь другой результат вывода для DEV/прод окр, и имеют функцию Сасс, которая имеет состояние, как, что внутри него: @if (NODE_ENV == 'prod') {}Можно ли ввести параметр NODE_ENV в файл sass с помощью загрузчика Webpack & sass?

мой webpack.config выглядит так:

module: { 
    loaders: [{ 
     test: /\.scss$/, 
     loader: "style-loader!raw-loader!sass-loader?includePaths[]=" + path.resolve(__dirname, "./node_modules/compass-mixins/lib") 
    }] 
} 

Я попытался передать параметр данных загрузчику, но ничего, что я пробовал, работал. по достоинству оценят любую помощь!

ответ

0

Посмотрите на источник sass-loader и он, похоже, не поддерживает какие-либо опции, которые позволят вам вставить переменную - так что это будет невозможно.

Я не думаю, что вы сможете «вставить» переменную env/build-time в ваш Sass, как это, но вы можете получить такое же поведение, создав несколько файлов Sass и требуя того, который вы хотите (из вашего источника js) на основе условия. Обратите внимание, что webpack имеет ограниченную способность анализировать логику вашего кода, однако - если вы хотите, чтобы в рамках условного условия было что-то в условном выражении, условие должно проверить логическое значение для его работы. Так что если вы делаете if (NODE_ENV === 'production') {...} else {...}, веб-пакет будет обрабатывать все необходимые условия во всех этих условиях. Если вы сделали что-то вроде if (IS_PROD_ENV) {...} else {...}, где условное значение является логическим, webpack будет следовать условной логике и обрабатывать только require. Плагин UglifyJS удалит ненужные условные ветви для вас.

2

это код непосредственно из ретранслятора sass-loader.

webpack.config.js

... sassLoader: { data: "$env: " + process.env.NODE_ENV + ";" } ...

+0

Я проверил и это работает! – TetraDev

Смежные вопросы