Псевдонимы загрузчиков Webpack?


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

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

Который отлично работает, но на некоторых требованиях я хочу добавить опцию modules в css-loader, так что это будет выглядеть так:

require('./foo.scss!css?modules&sourceMap&localIdentName=[path][name]__[local]__[hash...');
Но я не могу делать это повсюду.

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

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

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

2 9

2 ответа:

Загрузчик разрешений.здесь будет работать Элия. То есть.

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

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

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

В вашем коде.

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

Вместо этого вы можете добавить параметр в файл в операторе require

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

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

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