Постановка проблемы
У меня есть требование в устаревшем приложении React, которое имеет несколько файлов scss в определенном каталоге. CSS не импортируется на уровне компонентов, приложение использует gulp в качестве системы сборки, где оно отслеживает изменения файлов, выдает соответствующие файлы CSS, объединяет их, наконец, вставляет тег ссылки в файл index.html (этот шаг не требуется). находиться в режиме просмотра) и страница перезагружается.
Что нужно
Нам нужно переместить это из конфигурации gulp в использование Webpack для вышеупомянутых шагов.
Что я пробовал до сих пор - что работает
Моими первоначальными мыслями были (поскольку мы используем реагирующие сценарии и реагирующее приложение, перемонтированное)
- Используйте node-sass-chokidar, чтобы скомпилировать файлы sass в CSS и записать их в определенный каталог.
- После того, как этот шаг выполнен, в config-overrides.js я использовал подключаемый модуль Webpack под названием
webpack-concat-plugin
, чтобы объединить файлы в определенном каталоге в один файл и записать его в папку сборки. - В index.html есть тег ссылки, указывающий на расположение этого файла.
Вышеуказанные шаги работают в производственном режиме.
Что я пробовал до сих пор - что не работает
Я пытаюсь реализовать то же самое и в режиме разработки, но я не могу понять, как мне запускать плагин webpack-concat каждый раз, когда node-sass-chokidar выплевывает файлы css (он работает в режиме просмотра и запускает при каждом изменении файла scss). Я попытался создать собственный плагин Webpack и использовать режим просмотра, чтобы подключиться, но я не уверен в вышеупомянутом вопросе. Плагин webpack выглядит так.
const pluginName = 'ConcatCSSPlugin';
const ConcatPlugin = require('webpack-concat-plugin');
class ConcatCSSOnFileChangeWebpackPlugin {
apply(compiler) {
compiler.hooks.watchRun.tap(pluginName, compilation => {
console.log('The webpack hook is running');
/* How should I invoke the ConcatPlugin */
});
}
}
module.exports = ConcatCSSOnFileChangeWebpackPlugin;
config-overrides.js выглядит так
module.exports = {
webpack: function override(config, env) {
if (env === 'production') {
config.plugins.push(new ConcatPlugin({
outputPath: 'build/styles',
fileName: 'style.css',
injectType: 'none',
filesToConcat: ['./dist/compiled-css/**.css'],
attributes: {
async: true
}
}), new TestPlugin());
config.stats = {
all: true
}
}
return config;
}
}