Webpack基础
Webpack 基础
参考:
介绍
模块打包(构造)工具,解决模块间的依赖关系。还可以配置各种功能(开发者服务等)
- bundle(捆绑) images
- bundle styles
- bundle assets
- bundle script
webpack 依赖 node 环境
node 环境提供为了可以正常的执行很多代码。必须其中包含各种依赖的包。
主要就是 npm 工具(node packages manager)
vue-cli 中也内置了 webpack
- npm run build (生产打包)
- npm run dev (开发打包)
为什么用 Webpack
1.打包
- 解决文件的依赖
_ - 减少 http 的请求次数_
_ - 文件变小_
2.可以进行转化
- 通过各种 loader 把浏览器不认识的转化成认识的
3.前端的优化
- 代码的压缩,图片的压缩
4.构建开发服务器
webpack 和 gulp 有有什么区别
** 相同:**
** **** ** 1.都可以对文件进行压缩合并
2.转化不认识的语言
3.都可以创建前端服务器
** 不同:**
** 定位不同**
** **** **** ** glup 帮助构建自动化的项目,注重的是开发流程
webpack 注重的模块之间的依赖
什么时候用 webpack
做 spa 项目(单页面)用 webpack
不模块化,不单页面就用 glup
安装 webpack
** ** 路径一定不能有中文,且项目名不能为 webpack
打包项目的准备工作, 初始化:
1 |
|
目录下需要有个 src 文件夹
1 |
|
webpack 的配置文件 => webpack.config.js
mode: development 开发环境,production 生产环境
**development: **打包出来有识别性,方便调试,还有开发服务器。
**production: **为上线做准备,tree-shaking,压缩图片和代码体积。
loader 转换器
Loader 就是将 Webpack 不认识的内容转化为认识的内容,webpack 默认只认识 Js。
基本配置展示
1 |
|
Style-loader
在 head 标签内创建<style>
,在把 js 中 css 放在 style 里面
CSS use 顺序
在 rules 的 use 中,最后的应该是 less/sass 等需要编译的 css。然后再是 postcss, 添加前缀,后面才打包 css, 再把 css 放到 style 标签中等..
use: [ ‘style-loader’, ‘css-loader’, ‘postcss-loader’, ‘sass-loader‘, ]
CSS 兼容
使用 postcss-loader,自动添加 CSS3 部分属性的浏览器前缀
npm install postcss postcss-loader postcss-preset-env -D
给 css 样式添加不同浏览器的前缀,解决兼容问题。
创建 postcss 配置文件 postcss.config.js
1 |
|
创建 postcss-preset-env 配置文件 .browserslistrc
1 |
|
Sass/Less 兼容
$ npm install sass-loader -D
淘宝镜像
$ npm i node-sass --sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
1 |
|
less => npm i -D less less-loader
资源(图片,字体等) 打包
webpack5 已经放弃使用 url-loader 和 file-loader, 直接用内置的 assets
还是要使用 file-loader/url-loader 要这样配置:
–
1 |
|
html 图片 css 图片 分别配置 分别安装。
安装
npm i -D url-loader file-loader html-loader
css 中引入的 url: 图片字体等
1 |
|
处理引入(import) 的图片资源
1 |
|
先用 html-loader 拿到路径,再到 url-loader。 **–处理 html 的图片资源**
1 |
|
asset module 打包文件
webpack5 新增资源模块(asset module),允许使用资源文件(字体,图标等)而无需配置额外的 loader。
- asset/resource 将资源分割为单独的文件,并导出 url,类似之前的 file-loader 的功能.
- asset/inline 将资源导出为 dataUrl(base64) 的形式,类似之前的 url-loader 的小于 limit 参数时功能.
- asset/source 将资源导出为源码(source code). 类似的 raw-loader 功能.
- asset 会根据文件大小来选择使用哪种类型,当文件小于 8 KB(默认) 的时候会使用 asset/inline,否则会使用 asset/resource
1 |
|
打包其他文件
打包其他资源,写在最后
1 |
|
Plugin 插件
与 Loader 用于转换特定类型的文件不同,插件(Plugin)可以贯穿 Webpack 打包的生命周期,执行不同的任务
html 插件
帮你自动生成 html:比如把打包后的 js,css 等资源,用标签在 html 中引入
需要安装 npm i -D html-webpack-plugin
这是一个插件 所有需要在 plugins 中使用。且要先引入(require)
clean 插件
cnpm i -D clean-webpack-plugin
–引入 clean 插件 打包时会先清空 dist 文件夹,再重新添加
–直接在 plugin 中使用,不用配置
合并 css
不再使用 style-loader, 使用MiniCssExtractPlugin, 可以使多个 style 标签整合为一个 css 文件,再通过 link 标签在 html 中引入。
npm i -D mini-css-extract-plugin
开发者服务器 (实时更新编译)
npm i -D webpack-dev-server
npm webpack-dev-server
** **** nodejs 实现的**
- 是缓存于内存中的,而非映射到硬盘中,因为内存的读取速度吊打硬盘
- 测试都是基于内存的
- 只有再次执行 npm run build 。才会把内存中对应的数据输入到磁盘中去。
配置:
当版本 webpack-dev-server 的 version >= 4.0.0 时,需要使用 devServer.static 进行配置,不再有 devServer.contentBase 配置项。
为什么要配置 contentBase/static ?
webpack 打包的时候,对静态文件都是复制的,这消耗资源,太费时。而配置 contentBase/static 后,就直接到对应的静态文件目录下去取。大大提升了性能
–在 package.json 中配置 启动方式
–npm strat 就可以启动了。
<vue 脚手架的启动命令 其实就是执行这个 webpack 的命令>
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!