webpack

webpack是一个静态模块打包器。当webpack处理应用程序时,它会递归地构建一个依赖关系图,其中包含应用程序需要的每个模块,然后将这些模块打包成一个或多个bundle。

1.基本概念

现在webpack的最新版本已经是4.x了,经过迭代,现在webpack是高度可配置的。使用webpack之前需要了解四个核心概念

1.入口[entry]

入口起点指示webpack应该使用哪个模块来作为构建起内部依赖图的开始。进入入口起点后,webpack会找出有哪些模块和库是入口起点(直接和间接)依赖的。

每个依赖项随即被处理,最后输出到称之为bundles的文件中。

可以通过在webpack配置中配置entry属性,来指定一个入口起点(或多个入口起点)。默认值为./src

单入口的写法:

const config = {
    entry: './src/main.js'
};

module.exports = config;

多入口的写法:

const config = {
    entry: {
        pageOne: './src/pageOne/index.js',
        pageTwo: './src/pageTwo/index.js',
        pageThree: './src/pageThree/index.js'
    }
};

2.出口[output]

output属性告诉webpack在哪里输出它所创建的bundles,以及如何命名这些文件,默认值为./dist。基本上,整个应用程序结构,都会被编译到你指定的输出路径的文件夹中。注意:入口可能有多个,但是出口只有一个。

单个入口:

多个入口:

3.loader

loaderwebpack能够去处理那些非JavaScript文件(webpack自身只理解JavaScript)。loader可以将所有类型的文件转换为webpack 能够处理的有效模块,然后你就可以利用webpack的打包能力,对它们进行处理。

本质上,webpack loader将所有类型的文件,转换为应用程序的依赖图(和最终的bundle)可以直接引用的模块。

在更高层面,在webpac 的配置中loader有两个目标:

  1. test属性,用于标识出应该被对应的 loader 进行转换的某个或某些文件。

  2. use 属性,表示进行转换时,应该使用哪个 loader

在应用程序中有三种方式使用loader:

1.配置:在webpack.config.js文件中指定loader(推荐用法)

2.内联 在import语句中指定loader

使用!将资源中的loader分开。分开的每个部分都相对于当前目录解析。通过?来传递参数,下面的modules就是css-loader的参数。

3.通过CLI使用loader

这会对.jade文件使用jade-loader,对.css文件使用style-loadercss-loader

4.插件[plugins]

loader被用于转换某些类型的模块,而插件则可以用于执行范围更广的任务。插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量。插件接口功能极其强大,可以用来处理各种各样的任务。

想要使用一个插件,你只需要 require() 它,然后把它添加到plugins数组中。多数插件可以通过选项(option)自定义。你也可以在一个配置文件中因为不同目的而多次使用同一个插件,这时需要通过使用new操作符来创建它的一个实例。

配置

由于插件可以携带参数/选项,你必须在webpack配置中,向plugins属性传入new实例。

5.模式

通过选择developmentproduction 之中的一个,来设置mode参数,你可以启用相应模式下的webpack内置的优化。

2.一个完整的配置

3.参考文献

webpack中文文档arrow-up-right

Webpack 常用配置总结arrow-up-right

Last updated