前端自动化构建工具 - 第三节:webpack2 Plugin
Plugin
插件(Plugins)是用来拓展Webpack功能的,它们会在整个构建过程中生效,执行相关的任务。 Loaders和Plugins常常被弄混,但是他们其实是完全不同的东西,可以这么来说,loaders是在打包构建过程中用来处理源文件的(JSX,Scss,Less..),一次处理一个,插件并不直接操作单个文件,它直接对整个构建过程其作用。
内置插件 - BannerPlugin
- webpack.config.js
1
2
3
4
5
6
7
8
var webpack = require('webpack');
...
plugins: [
new webpack.BannerPlugin("Copyright Flying Unicorns inc.")//在这个数组中new一个就可以了
],
- 运行
1
npm start
第三方插件 HtmlWebpackPlugin
- 安装
1
npm install --save-dev html-webpack-plugin
- app/index.tmpl.html
1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Webpack Sample Project</title>
</head>
<body>
<div id='root'>
</div>
</body>
</html>
- webpack.config.js
1
2
3
4
5
plugins: [
new HtmlWebpackPlugin({
template: __dirname + "/app/index.tmpl.html"//new 一个这个插件的实例,并传入相关的参数
})
],
- 运行
1
npm start
Hot Module Replacement 自动刷新
Hot Module Replacement(HMR)也是webpack里很有用的一个插件,它允许你在修改组件代码后,自动刷新实时预览修改后的效果。 在webpack中实现HMR也很简单,只需要做两项配置
在webpack配置文件中添加HMR插件; 在Webpack Dev Server中添加“hot”参数;
不过配置完这些后,JS模块其实还是不能自动热加载的,还需要在你的JS模块中执行一个Webpack提供的API才能实现热加载,虽然这个API不难使用,但是如果是React模块,使用我们已经熟悉的Babel可以更方便的实现功能热加载。
整理下我们的思路,具体实现方法如下
Babel和webpack是独立的工具 二者可以一起工作 二者都可以通过插件拓展功能 HMR是一个webpack插件,它让你能浏览器中实时观察模块修改后的效果,但是如果你想让它工作,需要对模块进行额外的配额; Babel有一个叫做react-transform-hrm的插件,可以在不对React模块进行额外的配置的前提下让HMR正常工作;
- 安装
1
npm install --save-dev babel-plugin-react-transform react-transform-hmr
- webpack.config.js
1
2
3
4
plugins: [
...,
new webpack.HotModuleReplacementPlugin()//热加载插件
],
.babelrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{
"presets": [
"es2015",
"react"
],
"env": {
"development": {
"plugins": [
[
"react-transform",
{
"transforms": [
{
"transform": "react-transform-hmr",
"imports": [
"react"
],
"locals": [
"module"
]
}
]
}
]
]
}
}
}
产品阶段的构建
- 独立一个 webpack.production.config.js
1
2
3
4
5
6
....
output: {
path: __dirname + "/release",//打包后的文件存放的地方
filename: "bundle.js"//打包后输出文件的文件名
},
...
- package.json
1
2
3
4
5
6
7
8
9
10
11
12
13
{
"name": "webpack-sample-project",
"version": "1.0.0",
"description": "Sample webpack project",
"scripts": {
"start": "webpack-dev-server --progress",
"release": "NODE_ENV=production webpack --config ./webpack.production.config.js --progress"
},
"author": "Cássio Zen",
"license": "ISC",
"devDependencies": {...},
"dependencies": {...}
}
就是指定配置文件
- 运行
1
npm run release
优化插件 extract-text-webpack-plugin
webpack提供了一些在发布阶段非常有用的优化插件,它们大多来自于webpack社区,可以通过npm安装,通过以下插件可以完成产品发布阶段所需的功能
OccurenceOrderPlugin :为组件分配ID,通过这个插件webpack可以分析和优先考虑使用最多的模块,并为它们分配最小的ID UglifyJsPlugin:压缩JS代码; ExtractTextPlugin:分离CSS和JS文件
https://webpack.js.org/guides/production-build/