分析说明:通过 craco 来修改 webpack 配置,从而实现 CDN 优化
craco.config.js
// 添加自定义对于webpack的配置const path = require('path')const { whenProd, getPlugin, pluginByName } = require('@craco/craco')module.exports = {// webpack 配置webpack: {// 配置CDNconfigure: (webpackConfig) => {// webpackConfig自动注入的webpack配置对象// 可以在这个函数中对它进行详细的自定义配置// 只要最后return出去就行let cdn = {js: [],css: []}// 只有生产环境才配置whenProd(() => {// key:需要不参与打包的具体的包// value: cdn文件中 挂载于全局的变量名称 为了替换之前在开发环境下// 通过import 导入的 react / react-domwebpackConfig.externals = {react: 'React','react-dom': 'ReactDOM'}// 配置现成的cdn 资源数组 现在是公共为了测试// 实际开发的时候 用公司自己花钱买的cdn服务器cdn = {js: ['https://cdnjs.cloudflare.com/ajax/libs/react/18.1.0/umd/react.production.min.js','https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.1.0/umd/react-dom.production.min.js',],css: []}})// 都是为了将来配置 htmlWebpackPlugin插件 将来在public/index.html注入// cdn资源数组时 准备好的一些现成的资源const { isFound, match } = getPlugin(webpackConfig,pluginByName('HtmlWebpackPlugin'))if (isFound) {// 找到了HtmlWebpackPlugin的插件match.userOptions.cdn = cdn}return webpackConfig}}}
public/index.html
<body><div id="root"></div><!-- 加载第三发包的 CDN 链接 --><% htmlWebpackPlugin.options.cdn.js.forEach(cdnURL => { %><script src="<%= cdnURL %>"></script><% }) %></body>
