使用CDN加载第三方公共库优化项目体积

537 阅读1分钟

使用CDN加载第三方公共库优化项目体积

概述

在项目中会使用到很多的第三方库,将不怎么需要更新的第三方库脱离webpack打包,不被打入bundle中,从而减少打包时间,但又不影响运用第三方库的方式,例如import方式等

CDN网站

  1. jsDelivr

    image.png

  2. BootCDN

    image.png

项目配置CDN

使用cdn加速主要是配置两个文件:

  1. index.html
  2. vue.config.js

vue.config.js配置

  1. 打包时排除某些导入的包
// 判断是否为生产环境production
const isProd = process.env.NODE_ENV === 'production'

module.export = defineConfig({
    chainWebpack: config => {
        // 判断是否为生产环境
        if (isProd) {
            // 使用html-webpack-plugin插件添加isProd属性,用来给index.html文件判断是否为生产环境
            // 是生产环境才引入外部CDN资源
             config.plugin('html').tap(args => {
               args[0].isProd = isProd
               return args
             })
            // 打包时,排除项目中引入的以下包
            config.externals({
                vue: 'Vue',
                'vue-router': 'VueRouter',
                Vuex: 'Vuex',
                axios: 'axios',
                'element-ui': 'ELEMENT'
            })
        }
    }
})

2.index.html中引入CDN

使用htmlWebpackPlugin.options.isProd判断当前是否为生产环境。是则引入cdn,不是则不引入。

<% if (htmlWebpackPlugin.options.isProd) { %>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue-router@3.5.1/dist/vue-router.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vuex@3.6.2/dist/vuex.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/axios@1.1.3/dist/axios.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/element-ui@2.15.10/lib/index.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/xlsx@0.18.5/dist/xlsx.full.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/mavon-editor@2.10.4/dist/mavon-editor.min.js">
    </script>
<% } %>