# webpack 配置

# 入口文件

入口文件就是我们项目中加载的第一个文件,比如上面的 main.js 文件,其它文件都是通过 import 等方式引入的,webpack 会从我们指定的入口文件开始分析所有需要依赖的文件,然后把打包成一个完整文件。

# 打包配置

虽然,我们可以直接通过命令的来打包,但是推荐创建一个 webpack.config.js 的配置文件来实现更方便和强大的功能。

webpack 命令在运行的时候,默认会读取运行命令所在的目录下的 webpack.config.js 文件,通常我们会在项目的根目录下运行命令和创建配置文件。

我们也可以通过 —config 选项来指定配置文件路径:

webpack --config ./configs/my_webpack.config.js

通常情况下,我们的项目目录大致如下:

/
-- /dist - 项目打包后存放目录
-- /node_modules - 第三方模块
-- /src
------ css/
------ images/
------ js/
------ index.js
-- webpack.config.js
-- package.json

配置文件

module.exports = {
  ...	//配置项
}

# mode

模式 : "production" | "development" | "none"

不同的模式会对 webpack 打包的时候进行一些对应的优化配置。

module.exports = {
  mode: 'production'
}

# entry

指定打包⼊口⽂文件,有三种不同的形式:string | object | array

一对一:一个入口、一个打包文件

module.exports = {
  entry: "./src/index.js",
};

多对一:多个入口、一个打包文件

module.exports = {
  entry: ["./src/index1.js", "./src/index2.js"],
};

多对多:多个入口、多打包文件

module.exports = {
  entry: {
    index1: "./src/index1.js",
    index2: "./src/index2.js",
  },
};

# output

    module.exports ={
        ...,
        output:{
            path:path.resolve(__dirname,'dist'),
            filename: "bundle.js",
		    filename: "[name].js"
        }
    }
  • 可以指定一个固定的文件名称,如果是多入口多出口(entry 为对象),则不能使用单文件出口,需要使用下面的方式
  • 通过 webpack 内置的变量占位符:[name]
  • https://webpack.docschina.org/configuration/output/#template-strings

# hash chunkhash contenthash

# hash

每次编译都会创建一个新的hash值, 并且所有文件的hash都是一样的,因为是同一个 compilation 生成;

# chunkhash

每个入口文件都是一个chunk,每个chunk是由入口文件与其依赖所构成;

异步加载的文件也被视为是一个chunk;

chunkhash是每次编译模块及其依赖模块构成chunk生成的c, 每个chunk的chunkhash值都不一样, 也就是说每个chunk都是独立开来的,互不影响,chunk的更新不会影响其他chunk

但是, 每个chunk都是有css与js组成, 也就是说当其中一个文件发生变化,这个chunk都会重新编译,此时contenthash就出来了。

# contenthash

针对文件内容生成不同的hash, 只有当文件内容发生变化此hash才会重新生成,此时需要利用mini-css-extract-plugin插件取提取出每个chunk的css文件,将css与js隔离开,然后将css更改后

Last Updated: 6/16/2021, 5:44:45 PM