用
webpack
打包项目的时候,如果项目体量比较大,往往打出来的包vender.js
会很大,导致首屏加载慢,这时候用webpack
提供的externals
属性,像vue.js
、vuex.js
、vue-router.js
这些外部库,基本不会变的,如果将它们独立出来单独加载就能利于浏览器的缓存机制,不用每次都重新加载这些库js,并且大大的减少了打包的vendor.js
文件
优化的步骤有两步,以抽离项目中vue
和vue-router
为例。
第一步:配置externals
这个配置最好在生产环境的时候配置,如果静态资源是cdn
引入的话本地开发依赖网络。
//webpack.config.base.js
const webpack = require("webpack");
const path = require("path");
const MODE = 'development'
module.exports = {
mode: MODE,
entry: {
index: path.resolve(__dirname, '../src/main.ts')
},
...
externals: process.env.NODE_ENV === 'production' ? {
"vue": "Vue",
'vue-router': 'VueRouter'
} : {}
...
}
说一下这里的键值对配置,key值vue
这个值是import from 'vue'
时用的名称,value值是为Vue
,这个值是通过script
方式引入js
库后它的全局变量 ,这时vue
库的全局变量是首字母大写的Vue
。
第二步:引入静态资源
用externals
配置后,因为vender.js
里面没有了静态资源文件,所以需要额外引入,可以在index.html
引用cdn
引入或者本地引入。cdn
引入注意引用官方的,不然引用不当会导致线上项目挂了(之前入过坑…)。
//cdn
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.min.js"></script>
<script src="https://cdn.bootcss.com/vue-router/3.0.6/vue-router.min.js"></script>
//本地
<script src="./static/vue.min.js"></script>
<script src="./static/vue-router.min.js"></script>
配置完成
如果你是CDN
引入的会发现打包出来的vender.js
体积会变小,减少的部分就是静态资源的大小。
不过使用
externals
属性要注意的是,虽然可以优化首屏加载速度,但是由于静态资源分离,也会增加http
请求数量。所以如果是小项目,最好就不要用externals
属性,因为小项目打包的出来的vender.js
体积不大,建议项目体量较大的项目再用比较合适。
之前配置的时候有个小插曲,以为需要将项目中import
静态资源的语句全部去掉,有点尴尬,现在想想实在是有点逗,所以如果你在配置过程中碰到类似问题,可以跳过这个坑。
来源:CSDN
作者:叉叉酱
链接:https://blog.csdn.net/weixin_39782183/article/details/104773649