如何在 create-react-app 中使用 purgeCSS 删除未使用的 css 和 javascript
How to use purgeCSS in create-react-app to remove unused css and javascript
我有一个使用 create-react-app 构建的单页应用程序。我正在使用各种 npm 包,例如 antd
、reactstrap
等。有很多未使用的 CSS 和 javascript 正在减慢我的应用程序。我在没有添加任何配置的情况下阅读了 purgeCSS implementation in react to remove them. As per the document I'm unable to find config/webpack.prod.conf.js
in my application and cannot move forward. Can I just use the CLI?是否有任何类似且可靠的 npm 包可以做同样的事情。
我尝试实现第一个答案,我的配置如下:
const glob = require("glob-all");
const paths = require("react-scripts/config/paths");
const { override, addPostcssPlugins } = require("customize-cra");
const purgecss = require("@fullhuman/postcss-purgecss")({
content: [
paths.appHtml,
...glob.sync(`${paths.appSrc}/antd/es/button/**/*.js`, { nodir: true }),
...glob.sync(`${paths.appSrc}/antd/es/collapse/**/*.js`, { nodir: true }),
...glob.sync(`${paths.appSrc}/antd/es/dropdown/**/*.js`, { nodir: true }),
...glob.sync(`${paths.appSrc}/antd/es/form/**/*.js`, { nodir: true }),
...glob.sync(`${paths.appSrc}/antd/es/menu/**/*.js`, { nodir: true }),
...glob.sync(`${paths.appSrc}/antd/es/modal/**/*.js`, { nodir: true }),
...glob.sync(`${paths.appSrc}/antd/es/input/**/*.js`, { nodir: true }),
...glob.sync(`${paths.appSrc}/antd/es/tabs/**/*.js`, { nodir: true }),
...glob.sync(`${paths.appSrc}/antd/es/select/**/*.js`, { nodir: true }),
...glob.sync(`${paths.appNodeModules}/antd/es/button/**/*.css`, {
nodir: true,
}),
...glob.sync(`${paths.appNodeModules}/antd/es/collapse/**/*.css`, {
nodir: true,
}),
...glob.sync(`${paths.appNodeModules}/antd/es/dropdown/**/*.css`, {
nodir: true,
}),
...glob.sync(`${paths.appNodeModules}/antd/es/form/**/*.css`, {
nodir: true,
}),
...glob.sync(`${paths.appNodeModules}/antd/es/menu/**/*.css`, {
nodir: true,
}),...glob.sync(`${paths.appNodeModules}/antd/es/modal/**/*.css`, {
nodir: true,
}),
...glob.sync(`${paths.appNodeModules}/antd/es/input/**/*.css`, {
nodir: true,
}),...glob.sync(`${paths.appNodeModules}/antd/es/tabs/**/*.css`, {
nodir: true,
}),
...glob.sync(`${paths.appNodeModules}/antd/es/select/**/*.css`, {
nodir: true,
}),
...glob.sync(`${paths.appNodeModules}/antd/dist/antd.css`, {
nodir: true,
})
],
extractors: [
{
extractor: (content) => content.match(/([a-zA-Z-]+)(?= {)/g) || [],
extensions: ["css"],
},
],
});
module.exports = override(
addPostcssPlugins([
...(process.env.NODE_ENV === "production" ? [purgecss] : []),
])
);
仍然未使用 javascript,如下所示:
我没有弹出,因为它没有在提供的 link.
中给出
您需要退出应用程序才能找到 webpack 文件。
参考:https://facebook.github.io/create-react-app/docs/available-scripts#npm-run-eject
您可以在 package.json
中使用 postbuild
脚本
"scripts": {
...
"postbuild": "purgecss --css build/static/css/*.css --content build/index.html build/static/js/*.js --output build/static/css"
},
参考:https://purgecss.com/guides/react.html#run-purgecss-cli-in-postbuild
最简单的方法是按照本文的建议使用 craco
配置层:
我有一个使用 create-react-app 构建的单页应用程序。我正在使用各种 npm 包,例如 antd
、reactstrap
等。有很多未使用的 CSS 和 javascript 正在减慢我的应用程序。我在没有添加任何配置的情况下阅读了 purgeCSS implementation in react to remove them. As per the document I'm unable to find config/webpack.prod.conf.js
in my application and cannot move forward. Can I just use the CLI?是否有任何类似且可靠的 npm 包可以做同样的事情。
我尝试实现第一个答案,我的配置如下:
const glob = require("glob-all");
const paths = require("react-scripts/config/paths");
const { override, addPostcssPlugins } = require("customize-cra");
const purgecss = require("@fullhuman/postcss-purgecss")({
content: [
paths.appHtml,
...glob.sync(`${paths.appSrc}/antd/es/button/**/*.js`, { nodir: true }),
...glob.sync(`${paths.appSrc}/antd/es/collapse/**/*.js`, { nodir: true }),
...glob.sync(`${paths.appSrc}/antd/es/dropdown/**/*.js`, { nodir: true }),
...glob.sync(`${paths.appSrc}/antd/es/form/**/*.js`, { nodir: true }),
...glob.sync(`${paths.appSrc}/antd/es/menu/**/*.js`, { nodir: true }),
...glob.sync(`${paths.appSrc}/antd/es/modal/**/*.js`, { nodir: true }),
...glob.sync(`${paths.appSrc}/antd/es/input/**/*.js`, { nodir: true }),
...glob.sync(`${paths.appSrc}/antd/es/tabs/**/*.js`, { nodir: true }),
...glob.sync(`${paths.appSrc}/antd/es/select/**/*.js`, { nodir: true }),
...glob.sync(`${paths.appNodeModules}/antd/es/button/**/*.css`, {
nodir: true,
}),
...glob.sync(`${paths.appNodeModules}/antd/es/collapse/**/*.css`, {
nodir: true,
}),
...glob.sync(`${paths.appNodeModules}/antd/es/dropdown/**/*.css`, {
nodir: true,
}),
...glob.sync(`${paths.appNodeModules}/antd/es/form/**/*.css`, {
nodir: true,
}),
...glob.sync(`${paths.appNodeModules}/antd/es/menu/**/*.css`, {
nodir: true,
}),...glob.sync(`${paths.appNodeModules}/antd/es/modal/**/*.css`, {
nodir: true,
}),
...glob.sync(`${paths.appNodeModules}/antd/es/input/**/*.css`, {
nodir: true,
}),...glob.sync(`${paths.appNodeModules}/antd/es/tabs/**/*.css`, {
nodir: true,
}),
...glob.sync(`${paths.appNodeModules}/antd/es/select/**/*.css`, {
nodir: true,
}),
...glob.sync(`${paths.appNodeModules}/antd/dist/antd.css`, {
nodir: true,
})
],
extractors: [
{
extractor: (content) => content.match(/([a-zA-Z-]+)(?= {)/g) || [],
extensions: ["css"],
},
],
});
module.exports = override(
addPostcssPlugins([
...(process.env.NODE_ENV === "production" ? [purgecss] : []),
])
);
仍然未使用 javascript,如下所示:
您需要退出应用程序才能找到 webpack 文件。 参考:https://facebook.github.io/create-react-app/docs/available-scripts#npm-run-eject
您可以在 package.json
中使用postbuild
脚本
"scripts": {
...
"postbuild": "purgecss --css build/static/css/*.css --content build/index.html build/static/js/*.js --output build/static/css"
},
参考:https://purgecss.com/guides/react.html#run-purgecss-cli-in-postbuild
最简单的方法是按照本文的建议使用 craco
配置层: