webpack入门

166 阅读4分钟

webpack是什么?

webpack是模块化管理工具,使用webpack可以对模块进行压缩、预处理、按需打包、按需加载等。

Webpack的两个核心理念是:

  1. 万物皆模块:就像JS文件可以当做模块,那么其他所有的文件(CSS,图片,HTML)都可以当做模块。
  2. 按需加载,异步加载:一般的模块打包器会打包所有的模块然后生成一个巨大的输出文件bundle.js。但是在许多实际应用的APP中,这个bundle.js可能会有10MB-15MB那么大,并且总是会加载!而Webpack有一些功能可以分割代码然后生成多个"bundle"文件并且可以在你需要的时候异步加载。

先理解四个配置的核心概念

  • 入口(entry)
  • 输出(output)
  • loader
  • 插件(plugins)
入口(entry)


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

接下来我们看一个 entry 配置的最简单例子:

 webpack.config.js


输出(output)

output 属性告诉 webpack 在哪里输出它所创建的 bundles,以及如何命名这些文件,默认值为 ./dist。基本上,整个应用程序结构,都会被编译到你指定的输出路径的文件夹中。你可以通过在配置中指定一个 output 字段,来配置这些处理过程:



loader

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

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

注意,loader 能够 import 导入任何类型的模块(例如 .css 文件),这是 webpack 特有的功能,其他打包程序或任务执行器的可能并不支持。我们认为这种语言扩展是有很必要的,因为这可以使开发人员创建出更准确的依赖关系图。

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

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


插件(plugins)

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

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


模式

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


开发模式 VS 生产模式

我们可以配置webpack.config.js和webpack.config.prod.js两个js分别用来开发和生产,开发模式一般我们直接能看到实际效果,生产模式一般就抽离成文件。我们可以在package.json里面的script里面设置好命令,方便一键执行:




Webpack CLI VS webpack-dev-server

需要强调的一点是Webpack这个模块打包器提供了两个接口:

  1. Webpack CLI工具-默认接口(作为Webpack的一部分自动安装)。
  2. webpack-dev-server工具-一个Node.js服务器(需要单独安装)

Webpack CLI(适用于生产模式的构建)

此工具可以通过CLI或者配置文件(默认值:webpack.config.js)获取配置并传递给Webpack进行打包。

初学Webpack的时候可以使用CLI,大部分可能只会用来进行生产模式的构建。

//用法1: 

//全局安装
npm install webpack --g//yarn global add webpack

//在终端中运行
$ webpack //<--用webpack.config.js打包

//用法2:

//本地安装并添加到package.json
npm install webpack --save //yarn add webpack

//写到package.json的脚本里
“scripts”: {
 “build”: “webpack --config webpack.config.prod.js -p”,
 ...
 }
 
//运行脚本
"npm run build" //yarn build

Webpack-dev-server(适用于开发模式)

这是一个跑在8080端口上的Express服务器。这个服务器会在内部调用Webpack。用这个的好处是它提供了如刷新浏览器的"Live Reloading"功能和只替换发生改动的模块的"Hot Module Replacement"(HMR)功能。

//用法1:

//全局安装
npm install webpack-dev-server --g//yarn global add webpack-dev-server 


//在终端中运行
$ webpack-dev-server 

//用法2:

//写到package.json的脚本里
“scripts”: {
 “start”: “webpack-dev-server ”,
 ...
 }

//运行脚本
$ npm start //yarn start

//打开浏览器
http://localhost:8080


参考:webpack中文文档



前端小白,如有错误请留言指正!!!