2015-07-09 2 views
9

У меня довольно сложная настройка загрузчика для таблиц стилей:Псевдонимы загрузчика Webpack?

{ 
    test: /\.scss$/, 
    loader: ExtractTextPlugin.extract("style", 
     "css?sourceMap&localIdentName=[path][name]__[local]__[hash:base64:5]!sass?outputStyle=expanded&" + 
     "includePaths[]=" + other stuff) 
    ) 
    } 

который прекрасно работает, но на некоторых требует я хочу добавить modules опцию CSS-загрузчик, так что бы выглядеть следующим образом:

require('./foo.scss!css?modules&sourceMap&localIdentName=[path][name]__[local]__[hash...'); 

Но я не могу делать это повсюду.

Как это настроить, чтобы я мог включить флаг модулей css-loader по определенным требованиям, оставаясь при этом остальным?

Возможно, что-то вроде псевдонима погрузчика, например. require('./foo.scss!my-scss-with-modules-flag-alias')?

Единственное решение, о котором я могу думать, это написать загрузчик, который преобразует синтаксис, чтобы встроить конфигурацию загрузчика в определенные требуемые вызовы ... но это хрупкое и сложное.

+0

Как вы можете сказать, эти случаи друг от друга? Будет ли работать с псевдонимами для решения? В этом случае вы будете делать что-то вроде 'require ('with-modules! ./ foo.scss')' для каждого специального случая. –

+0

Это похоже на работу, спасибо! – FakeRainBrigand

+0

Хорошо, я переведу это как ответ. –

ответ

15

resolveLoader.alias будет работать здесь. То есть.

resolveLoader: { 
    alias: { 
     'with-modules': 'loader definition goes here', 
    } 
} 

Используя эту конфигурацию, вы можете сделать просто

require('with-modules!./foo.scss'); 

в вашем коде.

+2

Как вы дошли до этого решения? Webpack изумительный, ошибка, с которой мне трудно документировать ... –

+1

Ну, я создаю книги, связанные с webpack, так что это моя работа, чтобы знать эти вещи. Я добавил примечание об этом к документации, поскольку она отсутствовала ранее. Я согласен, что документация может быть немного непрозрачной. –

+1

@ JuhoVepsäläinen: Можете ли вы расширить свой ответ. Что будет в определении? Если я пытаюсь создать псевдоним с «style! Css? Modules! Postcss», я получаю сообщение об ошибке: Не удается разрешить стиль модуля! Css. –

1

Решение resolveLoader.alias может работать в данном случае, поскольку вы используете плагин в качестве загрузчика. Однако, если вам нужно использовать цепь погрузчиков, это не сработает. (На нем есть запрос функции: https://github.com/webpack/webpack/issues/2772).

Вместо этого, вы можете добавить параметр в файл в заявлении требуют

var styles = require('./foo.scss?modules'); 

И создать новое правило загрузчика:

module: { 
    loaders: [ 
     ... 
     { test: /\.scss$/, loader: 'style!css!postcss!sass' }, 
     { test: /\.scss\?modules$/, loader: 'style!css?modules!postcss!sass' } 
    ] 
} 
+0

Не удалось заставить это работать с помощью Webpack 3. Он всегда выбирал первого загрузчика, как если бы он игнорировал параметры запроса. – Ryall

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