【发布时间】:2020-10-15 16:00:58
【问题描述】:
问题陈述
我有一个旧版 React 应用程序的需求,该应用程序在特定目录中有多个 scss 文件。 CSS 不是在组件级别导入的,应用程序使用 gulp 作为构建系统,它监视文件更改,吐出相应的 CSS 文件,合并它们,最后在 index.html 文件中注入一个链接标签(这一步不需要处于监视模式)并且页面被重新加载。
需要什么
我们需要将它从 gulp 配置转移到使用 Webpack 来完成上述步骤。
到目前为止我所做的尝试 - 什么有效
我最初的想法是(因为我们使用 react-scripts 和 react-app-rewired)
- 使用 node-sass-chokidar 将 sass 文件编译成 CSS 并写入特定目录。
- 完成此步骤后,在 config-overrides.js 中,我使用了一个名为
webpack-concat-plugin的 Webpack 插件,将特定目录中的文件合并为一个文件并将其写入构建文件夹。李> - index.html 有一个指向该文件位置的链接标签
以上步骤在生产模式下工作。
到目前为止我尝试过的 - 什么不起作用
我也在尝试在开发模式下实现相同的功能,但我无法弄清楚“如何在每次 node-sass-chokidar 吐出 css 文件时运行 webpack-concat-plugin(它正在运行监视模式并在 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;
}
}
【问题讨论】:
标签: webpack react-scripts react-app-rewired