webpack简介
本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph)*,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 *bundle。
webpack五个核心概念
Entry(入口)
webpack以哪个文件为入口开始打包,分析构建内部依赖图。
OutPut(输出)
打包后的bundles输出到哪里,以及如何命名。
Loader
处理非js文件(webpack本身只能处理js文件)
Plugins(插件)
赋予一些更强劲的功能。
Mode
主要指定webpack响应模式的配置:
选项 | 描述 | 特点 |
---|---|---|
development | 开发模式 | |
production | 生产(线上)模式 |
webpack配置
1 | //webpack.config.js |
开发环境要做的事
打包样式资源
要用到loader。 下载–使用
css处理
1 | npm i css-loader,style-loader |
使用:
1 | module.exports = { |
处理流程:
先从入口文件开始打包,如果遇到引用文件,则将其引入。
每次引入的文件先经过loader配置进行过滤:
2.1 如果匹配到了test中的资源,则用use中的loader进行处理,处理顺序从右往左。
2.2 先用css-loader进行处理,将css文件写入js;
2.3 然后通过style-loader将js中的css字符串写进head中。
less处理
1 | npm i less,less-loader |
1 | module.exports = { |
语义和css一样。
打包HTML资源
要用到plugins:下载–引入–使用:
1 | npm i html-webpack-plugin |
1 | //引入 |
打包图片资源
1 | npm i url-loader file-loader # 处理图片 |
1 | module.exports = { |
其他资源
特点:无需做任何处理,原样打包过去就行。
1 | rules:[ |
开发服务器(自动编译,自动刷新)
1 | npm i webpack-dev-server -D |
1 | module.exports = { |
文件分类
项目中的文件是有分类的,比如js、css、img资源等。所以要想输出的资源也分门别类的放好,所以要加outputPath
属性。
js 更改filename
1 | output:{ |
其他的用outputPath
在options中添加outputPath
1 | { |
css文件不会有输出,因为css会被写入到js中去。
以上内容合并起来就是一个简单的webpack开发环境的配置。具体可以参考:https://gist.github.com/caoyangim/cb49b34bcf0dcf1d9ac9d3fdcc765480。
配置完成之后运行指令有两条,一个输出最终资源,一个直接展示成果:
webpack
和 npx webpack serve
生产(线上)环境要做的事
提取css成单独文件
[mini-css-extract-plugin][https://www.npmjs.com/package/mini-css-extract-plugin]:会生成单独的css文件。
css兼容性处理
[postcss-loader][https://www.npmjs.com/package/postcss-loader]:生成的css文件中会自动处理兼容性问题。
css压缩
optimize-css-assets-webpack-plugin
语法检查
eslint-loader eslint
检查规则在package.json中设置:这里用airbnb规则,用eslint-config-airbnb。
1 | npm i eslint-loader eslint eslint-config-airbnb |
1 | //package.json中: |
js兼容性
[babel-loader][https://www.npmjs.com/package/babel-loader] 兼容es6语法到低版本浏览器
js压缩
mode:production 生产环境会自动压缩js
html压缩
Html-webpack-plugin
1 | new HtmlWebpackPlugin({ |