[3] 打包(线上环境)分析

150 阅读2分钟

一、项目说明

App.vue中2个组件,一个About.vue组件懒加载导入,一个Home.vue组件,正常引入。

二、html打包后分析

  • 为你生成一个 HTML5 文件
  • js注入,在 body 中使用 script 标签引入你所有 webpack 生成的 bundle(js)
  • css文件注入,假如你使用 MiniCssExtractPlugin插件(这个插件也是必须要了解的)将css文件是单独剥离出来,不放在html中的style标签内,它会自动将css链接注入到link标签中

index.html文件里:app节点

<body>
  <noscript>
  	<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
	</noscript>
	<div id="app"></div>
	<!-- built files will be auto injected -->
</body>

打包后,dist目录下生成index.html,里面插入了dist下的js和css。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自定义模板</title>
   - <link rel="stylesheet" href="style.css">
</head>
<body>
   - <div id="app"></div>
   - <script type="text/javascript" src="app.min.js"></script>
</body>
</html>

Vue-Cli默认将打包后的内容放到dist目录下,HtmlWebpackPlugin生成的html5文件放到dist目录下,想要修改html5的打包后的目录,修改HtmlWebpackPlugin配置就是。

对应vue-cli里通过pages的filename属性可修改打包后的文件。

三、JS打包后分析

打包后的文件里有多个bundle,项目里是因为路由懒加载造成的,webapck分片,按需加载。

image.png

  • app.***.js 是打包后的总的js文件,那些非懒加载的打包到了一起。
  • chunk-vendor.***.js 打包node-modules
  • about.***.js 因为vue-router 路由懒加载缘故,不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,打包成单独的一个。--性能优化的方向之一。

    ps:js下的map,是开启了sourceMap功能,为了方便调试,打包后的代码和源码的映射。

vue路由懒加载最优体验


component: () => import(/* webpackChunkName: "about" */ '../views/About.vue') 

基本语法:import(/* webpackChunkName: "chunk名称(用于代码分割)" */ "组件路径")
在动态import()代码处添加注释webpackChunkName告诉webpack打包后的chunk的名称(注释中的内容很重要,不能省掉),这里打包以后的name就是about。

指定chunk name ,打包后的名字清晰。

因为路由懒加载会将每个模块单独打包,有时我们需要将多个懒加载的的模块,打包成一个chunk,可以指定同一个chunk name 来实现。

vue-cli对js 的打包处理:

image.png

四、CSS打包后分析

image.png Vue-Cli 的css.extract 中线上环境(即打包单独的css目录)使用了 MiniCssExtractPlugin插件,将CSS单独打包。

其他环境不使用MiniCssExtractPlugin,CSS以style标签形式和JS打包都一起。例如: image.png MiniCssExtractPlugin为每个包含 CSS 的 JS 文件(打包出来的)创建一个 CSS 文件。例如about..css 是about..js里使用的css。app..css是app.*.js里使用的cs.

vue-cli 源码对css的处理

filename 与 chunkFilenameMiniCssExtractPlugin
image.pngimage.png

注意: Vue-Cli 默认下,开发环境不开启MiniCssExtractPlugin功能,线上环境开启。
详细说明:km.sankuai.com/page/651659…