如何使用 CRA 中的 Webpack 配置覆盖更改 CSS 包名称?
How to change the CSS bundle name using a Webpack config override in CRA?
我目前有一个 config-overrides.js
文件,用于更改 Create React App 为 JS 文件生成的包名称。我希望能够将类似的逻辑应用到我的 CSS 包中。
配置覆盖文件的内容如下:
module.exports = function override(config, webpackEnv) {
const isEnvDevelopment = webpackEnv === 'development';
const isEnvProduction = webpackEnv === 'production';
config.output.filename = isEnvProduction
? 'static/js/[name].js?nocache=[contenthash:8]'
: isEnvDevelopment && 'static/js/bundle.js';
config.output.chunkFilename = isEnvProduction
? 'static/js/[name].chunk.js?nocache=[contenthash:8]'
: isEnvDevelopment && 'static/js/[name].chunk.js';
return config
}
除了 CSS bundles/chunks 我怎样才能达到相同的结果?
编辑: 我注意到我跳过了我正在使用 react-app-rewired
进行配置覆盖的事实。
我不这么认为,特别是在当前这个时间。 CRA 有一个可以破坏整体的 hack。 CRA 落后了,postcss 当前版本是 8,CRA 使用的一些软件包使用 postcss 的版本 7,而 v8 带有中断更改。即使你能做到这一点,你也无法修复其余的 w/out 弹出问题。
但是,有一个巨大的但是,CRA 在他们的插件部分使用这个 webpack。
of the problems.new MiniCssExtractPlugin({
// Options similar to the same options in webpackOptions.output
// both options are optional
filename: "static/css/[name].[contenthash:8].css",
chunkFilename: "static/css/[name].[contenthash:8].chunk.css",
}),
而且他们还有一个 webpack 加载器
// "file" loader makes sure those assets get served by WebpackDevServer.
// When you `import` an asset, you get its (virtual) filename.
// In production, they would get copied to the `build` folder.
// This loader doesn't use a "test" so it will catch all modules
// that fall through the other loaders.
{
loader: require.resolve("file-loader"),
// Exclude `js` files to keep "css" loader working as it injects
// its runtime that would otherwise be processed through "file" loader.
// Also exclude `html` and `json` extensions so they get processed
// by webpacks internal loaders.
exclude: [ /\.(js|mjs|jsx|ts|tsx)$/, /\.html$/, /\.json$/ ],
options: {
name: "static/media/[name].[hash:8].[ext]",
},
},
我目前有一个 config-overrides.js
文件,用于更改 Create React App 为 JS 文件生成的包名称。我希望能够将类似的逻辑应用到我的 CSS 包中。
配置覆盖文件的内容如下:
module.exports = function override(config, webpackEnv) {
const isEnvDevelopment = webpackEnv === 'development';
const isEnvProduction = webpackEnv === 'production';
config.output.filename = isEnvProduction
? 'static/js/[name].js?nocache=[contenthash:8]'
: isEnvDevelopment && 'static/js/bundle.js';
config.output.chunkFilename = isEnvProduction
? 'static/js/[name].chunk.js?nocache=[contenthash:8]'
: isEnvDevelopment && 'static/js/[name].chunk.js';
return config
}
除了 CSS bundles/chunks 我怎样才能达到相同的结果?
编辑: 我注意到我跳过了我正在使用 react-app-rewired
进行配置覆盖的事实。
我不这么认为,特别是在当前这个时间。 CRA 有一个可以破坏整体的 hack。 CRA 落后了,postcss 当前版本是 8,CRA 使用的一些软件包使用 postcss 的版本 7,而 v8 带有中断更改。即使你能做到这一点,你也无法修复其余的 w/out 弹出问题。
但是,有一个巨大的但是,CRA 在他们的插件部分使用这个 webpack。
of the problems.new MiniCssExtractPlugin({
// Options similar to the same options in webpackOptions.output
// both options are optional
filename: "static/css/[name].[contenthash:8].css",
chunkFilename: "static/css/[name].[contenthash:8].chunk.css",
}),
而且他们还有一个 webpack 加载器
// "file" loader makes sure those assets get served by WebpackDevServer.
// When you `import` an asset, you get its (virtual) filename.
// In production, they would get copied to the `build` folder.
// This loader doesn't use a "test" so it will catch all modules
// that fall through the other loaders.
{
loader: require.resolve("file-loader"),
// Exclude `js` files to keep "css" loader working as it injects
// its runtime that would otherwise be processed through "file" loader.
// Also exclude `html` and `json` extensions so they get processed
// by webpacks internal loaders.
exclude: [ /\.(js|mjs|jsx|ts|tsx)$/, /\.html$/, /\.json$/ ],
options: {
name: "static/media/[name].[hash:8].[ext]",
},
},