美文网首页
vue中使用cdn优化

vue中使用cdn优化

作者: 萤火kin | 来源:发表于2021-12-07 09:21 被阅读0次

    vue中使用cdn优化

    参考

    在Vue项目中,引入到工程中的所有js、css文件,编译时都会被打包进vendor.js,浏览器在加载该文件之后才能开始显示首屏。若是引入的库众多,那么vendor.js文件体积将会相当的大,影响首开的体验。

    解决方法是,将引用的外部js、css文件剥离开来,不编译到vendor.js中,而是用资源的形式引用,这样浏览器可以使用多个线程异步将vendor.js、外部的js等加载下来,达到加速首开的目的。

    1、在index中将资源引入

    • 在public文件中添加引入的包
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width,initial-scale=1.0">
        <!-- 这里为引入的包 -->
        <% for(var css of htmlWebpackPlugin.options.cdn.css) { %>
          <link rel="stylesheet" href="<%=css%>" as="style">
        <% } %>
        <% for(var js of htmlWebpackPlugin.options.cdn.js) { %>
          <script src="<%=js%>"></script>
        <% } %>
        <!---->
        <link rel="icon" href="<%= BASE_URL %>favicon.ico">
        <title></title>
      </head>
    
    

    2、vue.config.js中做配置

    • 在vue.config.js中做配置,在module.exports中添加configureWebpack和pages这两个属性。
    module.exports = {
        publicPath: BASE_URL,
        // tweak internal webpack configuration.
        // see https://github.com/vuejs/vue-cli/blob/dev/docs/webpack.md
        // 如果你不需要使用eslint,把lintOnSave设为false即可
        lintOnSave: false,
        chainWebpack: config => {
            config.resolve.alias
                .set('@', resolve('src')) // key,value自行定义,比如.set('@@', resolve('src/components'))
                .set('_c', resolve('src/components'));
            config.module
                .rule('vue')
                .use('iview')
                .loader('iview-loader')
                .options({ prefix: false });
        },
        // 设为false打包时不生成.map文件
        productionSourceMap: false,
        // 这里写你调用接口的基础路径,来解决跨域,如果设置了代理,那你本地开发环境的axios的baseUrl要写为 '' ,即空字符串
        devServer: {
            proxy: ''
        },
        configureWebpack: {
            // 打包忽略文件
            externals: {
                "vue": "Vue",
                "view-design": "iview",
                "vue-router": "VueRouter",
                "axios": "axios",
                "vue-i18n": "vue-i18n",
                "vuex": "Vuex",
                "echarts": "echarts",
                "js-cookie": "Cookies",
                "accounting-js": "accounting",
                "dayjs": "dayjs",
            }
        },
        pages: {
            index: {
                entry: 'src/main.js',
                template: 'public/index.html',
                filename: 'index.html',
                chunks: ['chunk-vendors', 'chunk-common', 'index'],
                cdn: {
                    css: [
                        'https://cdn.jsdelivr.net/npm/view-design@4.5.0/dist/styles/iview.css'
                    ],
                    js: [
                        "https://cdn.jsdelivr.net/npm/vue@2.5.10/dist/vue.min.js",
                        "https://cdn.jsdelivr.net/npm/vue-router@3.0.1/dist/vue-router.min.js",
                        "https://cdn.jsdelivr.net/npm/view-design@4.5.0/dist/iview.min.js",
                        "https://cdn.jsdelivr.net/npm/vue-i18n@7.8.0/dist/vue-i18n.min.js",
                        "https://cdn.jsdelivr.net/npm/axios@0.18.0/dist/axios.min.js",
                        "https://cdn.jsdelivr.net/npm/vuex@3.0.1/dist/vuex.min.js",
                        "https://cdn.jsdelivr.net/npm/echarts@4.0.4/dist/echarts.min.js",
                        "https://cdn.jsdelivr.net/npm/view-design@4.5.0/dist/locale/en-US.js",
                        "https://cdn.jsdelivr.net/npm/view-design@4.5.0/dist/locale/zh-TW.js",
                        "https://cdn.jsdelivr.net/npm/view-design@4.5.0/dist/locale/zh-CN.js",
                        "https://cdn.jsdelivr.net/npm/js-cookie@2.2.0/src/js.cookie.min.js",
                        "https://cdn.jsdelivr.net/npm/accounting-js@1.1.1/dist/accounting.umd.min.js",
                        "https://cdn.jsdelivr.net/npm/dayjs@1.7.7/dayjs.min.js",
                    ]
                },
            }
        }
    }
    

    3、将原有的依赖包引用去掉

    • 将引入的cdn中,所有本地引入的依赖都注释掉或删掉。
    import App from './App'
    import router from './router'
    import store from './store'
    // import iView from 'view-design'
    import i18n from '@/locale'
    import config from '@/config'
    import importDirective from '@/directive'
    import {
        directive as clickOutside
    } from 'v-click-outside-x'
    import installPlugin from '@/plugin'
    // import 'view-design/dist/styles/iview.css';
    import './index.less'
    import '@/assets/icons/iconfont.css'
    
    • 如遇到本地引入的依赖在其他处使用的情况,可在控制台输出this查找到vue的实例,看挂载到vue实例上的依赖的名称,然后替换掉。(如果本地引入命名和vue实例上依赖命名一样,此步可忽略)
    image.png
    <!-- 此处的iview在使用中 -->
    Vue.use(iview, {
        i18n: (key, value) => i18n.t(key, value)
    })
    

    相关文章

      网友评论

          本文标题:vue中使用cdn优化

          本文链接:https://www.haomeiwen.com/subject/nmnzxrtx.html