webpack打包知识点总结

  • Post author:
  • Post category:其他




webpack打包知识点总结

1.

webpack

是一个模块打包工具,能够从一个需要处理的

JavaScript

文件开始,构建一个依赖关系图(

dependency graph

),该图映射到了项目中每个模块,然后将这个依赖关系图输出到一个或者多个

bundle

中。

2.关键概念:


entry

:项目入口


module

:开发中每一个文件都可以看做

module

,模块不局限于

js

,也包含

css

、图片等


chunk

:代码块,一个

chunk

可以由多个模块组成


loader

:模块转化器,模块的处理器,对模块进行转换处理


plugin

:扩展插件,插件可以处理

chunk

,也可以对最后的打包结果进行处理,可以完成

loader

完不成的任务


bundle

:最终打包完成的文件,一般就是和

chunk

一一对应的关系,

bundle

就是对

chunk

进行便意压缩打包等处理后的产出

3.

Loader

解析顺序是从右到左(从后到前)的

4.三大主流模块规范


CommonJS



AMD



ES6 Module



CommonJS



node.js

、服务器、同步,使用

require

来导入一个模块,

module.exports

导出模块

// sayhi.js
var hi = 'hello world';
function sayHi() {
    return hi;
}
module.exports = sayHi;
// index.js
var sayHi = require('./sayhi.js');
console.log(sayHi());



AMD

:浏览器、异步,使用

require()

:引入其他模块;

define()

:定义新的模块

// sayhi.js
define(function() {
    var hi = 'hello world';
    return function sayHi() {
        return hi;
    };
});
// index.js
require(['./sayhi.js'], function(sayHi) {
    console.log(sayHi());
});



ES6 Module

,不仅仅在 Web 现代浏览器(例如 Chrome)上面得到实现,而且在

Node.js

9+ 版本也得到原生支持(需要加上

--experimental-modules

使用)

// sayhi.js
const hi = 'hello world';
export default function sayHi() {
    return hi;
}
// index.js
import sayHi from './sayhi';
console.log(sayHi());

4.Webpack生成bundle的hash值有三种:



hash

:每次编译

Compilation

对象的

hash

,全局一致,跟单次编译有关,跟单个文件无关,不推荐使用;



chunkhash



chunk



hash

,根据不同的

chunk

及其包含的模块计算出来的

hash



chunk

中包含的任意模块发生变化,则

chunkhash

发生变化,推荐使用;



contenthash

:CSS 文件特有的

hash

值,是根据

CSS

文件内容计算出来的,

CSS

发生变化则其值发生变化,推荐

CSS

导出中使用。

5.在 Webpack 中,总共提供了三种方式来实现代码拆分(Code Splitting):



entry

配置:通过多个 entry 文件来实现;

②动态加载(按需加载):通过写代码时主动使用

import()

或者

require.ensure

来动态加载;

③抽取公共代码:使用

splitChunks

配置来抽取公共代码。



版权声明:本文为gg_18826075157原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。