1、webpack的主要功能:
2、安装
1 |
|
此方式不推荐,因为每个人的webpack版本都不一样,在多人维护同一项目时会发生冲突。
推荐:
1 |
|
webpack版本是4.0以上时需要下载webpack-cli。
3、webpack4.0及以上的基本配置:
1 |
|
4、一个完整的webpack例子:
1 |
|
这是一个简单完整的配置,其中用到几个插件:
1)html-webpack-plugin:找到相应的模板,并将打包后的js引入到此模板中。
也可以利用tmpl这种的模板进行配置:
1 |
|
index.tmpl.html:
1 |
|
其写法与html一样,只是命名时要以tmpl.html结尾。
2)clean-webpack-plugin:清除webpack打包出来的文件。
这里要注意的是,如果打包后的目录是dist 括号中什么都不用写。
3)banner-plugin:不需要单独下载,用于给编译后的js文件添加注释。
4)HotModuleReplacementPlugin:webpack自带的插件,与webpack-dev-server命令配合使用,用于做局部热更新。
webpack-dev-server 命令启动后,会在本地启动一个服务,端口与webpack配置有关(默认是8080),此时打包后的文件在内存中,并不在我们的项目dist文件里,
任意修改html文件或者js文件并保存,整个页面都会刷新一遍,在html或者js内容很多的情况下,非常不利于我们的开发,因此采用此插件进行局部更新。具体做法是:
首先在配置文件中引入webpack模块,并在plugins中new一个实例:
1 |
|
然后再在入口文件的末尾添加一段代码:
1 |
|
与js编译有关的插件先说这几个。
5、entry:
entry配置有几种方式,第一种是4中的写法,这种配置代表只有一个入口。
第二种是入口有一个,引入两个JS打包后的js:
1 |
|
第三种是入口有多个,分别引入打包后的js:
1 |
|
6、编译css
1)安装loader :
1 |
|
注:css-loader 具有热更新的功能。
1)编译less:
在module中添加以下配置:
1 |
|
loader的顺序是倒序的,上面的配置先将less文件转成css文件,再将css样式插入到html的style标签中。
2)抽离css样式到一个css文件中,通过link引入编译后的css文件:
1 |
|
注:a.后者有望取代前者,前者比较稳定,后者还存在点问题;
b.extract-text-webpack-plugin是webpack3提出的插件,webpack4要用需加@next。
文档如下:
配置如下:
1 |
|
但是这种配置方式不具备热更新功能,因此插入到页面上的link标签里的内容如果有变化,需要手动刷新,可以改写成以下方式:
1 |
|
3)去除没有用到的css样式:
1 |
|
配置:
1 |
|
注意事项:必须与ExtractTextWebpackPlugin配套使用,且放在其下面。
4)css3样式添加前缀:
1 |
|
postcss.config.js配置:
1 |
|
然后可在module配置的rules中添加一个loader:
1 |
|
1 |
|
7、其他插件
1)复制文件
1 |
|
配置:
1 |
|
将./src/doc路径下的文件复制到dist目录的public文件夹下。
8、自己写loader
1) 在配置中添加解析自定义loader的配置:
1 |
|
以上配置是用来解析build/rules文件夹下的js文件的。
2)编写自定义loader:
文件目录如图:
reverse-loader index.js:
1 |
|
这个是反转字符串的loader。
static-loader index.js:
1 |
|
这个是替换图片的loader。
3)webpack中的相应配置:
1 |
|
9、webpack知识补充:
1)可以在不配置webpack.config.js的情况下直接运行webpack
npx webpack (npx命令要求node版本是8.5以上)
这个命令会做两件事:第一会检测webpack是否安装 没有的话会自动安装一个;第二会直接运行node_modules中bin下的webpack.cmd。
但一般情况下不会采用这种方式,需要自己手动配置一些规则。
2)关于babel-loader
a.babel-loader: 主要解析ES6、ES7等浏览器支持不好的JS语言
b.”babel-core”: “^6.26.3”,”babel-loader”: “^7.1.5”,这两个版本配合使用
3)plugin 和loader 的区别:
loader: 一个转换器,将A文件进行编译形成B文件,单纯的文件转换过程
plugin: 一个扩展器,丰富webpack本身,针对loader结束后,webpack打包的整个过程,并不直接操作文件,会基于事件机制工作,会监听webpack打包过程中的某些节点,执行广泛任务。