Подтвердить что ты не робот

С помощью Webpack можно генерировать только CSS, исключая output.js?

Я использую Webpack с extract-text-webpack-plugin.

В моем проекте у меня есть сценарии сборки. Один из сценариев сборки должен связывать и только минимизировать CSS. Поскольку я использую Webpack для других скриптов, мне было неплохо использовать Webpack, даже когда Я хочу только объединить и уменьшить CSS.

Он работает нормально, за исключением того, что я не могу избавиться от файла output.js. Я не хочу получить выходной файл webpack. Я просто хочу CSS для этого конкретного script.

Есть ли способ избавиться от получаемого JS? Если нет, предлагаете ли вы какой-либо другой инструмент для обработки CSS? Спасибо.

4b9b3361

Ответ 1

Существует простой способ, не требуется дополнительный инструмент.

Существует простой способ, и вам не нужны дополнительные библиотеки, кроме тех, которые вы уже используете: webpack с extract-text-webpack-plugin.

Короче:

Сделать выходные файлы js и css одинаковыми, тогда файл css переопределит js файл.

Настоящий пример (webpack 2.x):

import path from 'path'
import ExtractTextPlugin from 'extract-text-webpack-plugin'

const config = {
  target: 'web',
  entry: {
    'one': './src/one.css',
    'two': './src/two.css'
  },
  output: {
    path: path.join(__dirname, './dist/'),
    filename: '[name].css' // output js file name is identical to css file name
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ExtractTextPlugin.extract({
          fallback: 'style-loader',
          use: 'css-loader'
        })
      }
    ]
  },
  plugins: [
    new ExtractTextPlugin('[name].css') // css file will override generated js file
  ]
}

Ответ 2

К сожалению, в настоящее время это невозможно по дизайну. webpack был запущен как сборщик JavaScript, который способен обрабатывать другие "веб-модули", такие как CSS и HTML. JavaScript выбран в качестве базового языка поскольку он может размещать все остальные языки просто как строки. Модуль extract-text-webpack-plugin просто извлекает эти строки как автономный файл (таким образом, имя).

Вероятно, вам лучше с PostCSS, который предоставляет различные плагины для эффективного постпроцесса CSS.

Ответ 3

Одним из решений является выполнение webpack с API Node и управление выходом с помощью опции memory-fs. Просто скажите, чтобы проигнорировать полученный js файл. Установите для параметра output.path значение "/" в webpackConfig.

var compiler = webpack(webpackConfig);
var mfs = new MemoryFS();
compiler.outputFileSystem = mfs;
compiler.run(function(err, stats) {
    if(stats.hasErrors()) { throw(stats.toString()); }
    mfs.readdirSync("/").forEach(function (f) {
        if(f === ("app.js")) { return; } // ignore js-file
        fs.writeFileSync(destination + f, mfs.readFileSync("/" + f));
    })
});

Ответ 4

Вы можете очистить папку dist от любых нежелательных ресурсов после запуска done. Этого легко добиться с помощью event-hooks-webpack-plugin

//
plugins: [
        new EventHooksPlugin({
            'done': () => {
                // delete unwanted assets 
            }
        })
    ]

Удачи...