[聚合文章] webpack3实战(5)打包一个多页、jQuery、图片转base64、压缩混淆、异步模块加载的项目

jQuery 2017-12-19 20 阅读
  • 入口:设置入口文件;
  • 出口:设置打包后的文件夹以及文件命名;
  • babel-loader:用于将es6、es7等语法,转换为es5语法;
  • css-loader:用于处理css文件(主要是处理图片的url);
  • style-loader:将转换后的css文件以 style 标签形式插入 html 中;
  • postcss-loader:一般用于添加兼容性属性前缀;
  • less-loader:以 less 语法来写 css ;
  • url-loader:用于将图片小于一定大小的文件,转为 base64 字符串;
  • file-loaderurl-loader 不能转换 base64字符串 的文件,被这个处理(主要用于设置打包后图片路径,以及CDN等);
  • html-withimg-loader:用于加载html模板;
  • html-webpack-plugin :用于将已有 html 文件作为模板,生成打包后的 html 文件;
  • clean-webpack-plugin:用于每次打包前清理dist文件夹
  • CommonsChunkPlugin:提取 chunks 之间共享的通用模块
  • 3、技术难点

    3.1、多页面

    多页模式是一个难点。

    且不考虑共同模块(这里主要指的是html模板,而不是js的模块),光是单独每个入口 js 文件需要搭配一个相对应的 html 文件,就已经是一件很麻烦的事情了。

    对于这个问题,需要借助使用 html-webpack-plugin 来实现。

    由于之前木有 html-webpack-plugin 的相关内容,这里只讲思路和代码。

    第一:多入口则多个html文件

    也是核心内容,html-webpack-plugin 只负责生成一个 html 文件。

    而多入口显然需要生成多个 html 文件,因此 有多少个入口,就需要在 webpack 的 plugins 里添加多少个 html-webpack-plugin 的实例。

    同时,我们还要更改 webpack 的 entry 入口,entry 的值应该是根据入口数量自动生成的对象。

    第二:chunks特性实现按需加载

    通过配置 html-webpack-pluginoptions.chunks ,可以让我们实现让 login.html 只加载 login/index.js,而 userInfo.html 只加载 userInfo/index.js(注:由于以 entry 的 key 作为寻找出口文件的根据,因此打包后带 hash 的文件名不影响匹配);

    注意,这个实现的机制,是通过 options.chunk 的值,去匹配 webpack.config.jsentry 对象的 key

    因为一个入口文件对应一个出口文件,所以这里会去拿入口文件对应的出口文件,将其加到 html 文件里。

    第三:template自定义作为模板的 html 文件

    options.template 可以自定义该实例以哪个 html 文件作为模板。

    第四:filename

    options.filename 可以自定义生成的 html 文件输出为什么样的文件名。

    第五:管理多入口

    已知:

    一个 html-webpack-plugin 实例具有以下功能:

    1. 生成一个 html 文件(一);
    2. 决定自己引入哪个 js 文件(二)(记得,webpack只负责打包js文件,不负责生成 html 文件。生成实例是依靠这个 plugins);
    3. 决定自己以哪个 html 文件作为模板(三);
    4. 决定自己打包后的目录和文件名(四);

    我们通过webpack打包后,一个入口 js 文件会对应一个出口 js 文件;

    而每个入口 js 文件,都对应一个 html 模板文件;

    因此每个 html 模板文件,都知道自己对应哪个出口 js 文件;

    所以以上是实现多入口的原理。

    代码:

    多入口管理文件:

    config/entry.json

    注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。