静态资源:图片,富媒体,字体文件等

图片引入方式

1.html 中通过 12.使用webpack管理项目中的静态资源 - 图1 标签等方式引入
2.css 中 通过 src等方式引入
3.javascript 中使用图片的URL或者内容 (比如 canvas)

使用 loader 来加载图片资源

file-loader url-loader

  • file-loader 能够根据配置项复制使用到的资源(不局限于图片)到构建之后的文件夹,并且能够更改对应的链接
  • url-loader 包含 file-loader 的全部功能,并且能够根据配置将符合配置的文件转换成base64方式引入,将小体积的图片base64引入项目可以减少 http 请求,也是一个前端常用的优化方式

url-loader 的 limit 选项来控制不超过一定限制的图片才使用base64

  1. {
  2. test: /\.(png|svg|jpg|gif)$/,
  3. use: {
  4. loader: "url-loader",
  5. options: {
  6. limit: 3 * 1024, //3k
  7. },
  8. },
  9. },

配置 cdn 域名

一般静态资源上线的时候都会放到CDN,假设我们的CDN域名和路径为 http://xxx.xxx.com/img/
只需要修改 output.publicPath

  1. module.exports = {
  2. output:{
  3. publicPath:'http://xxx.xxx.com/img/'
  4. }
  5. }

image.png

html和css中使用 alias

url-loader 会处理使用别名引入的方式

  1. module.exports = {
  2. resolve:{
  3. alias:{
  4. '@assets':path.resolve(__dirname,'./src/assets')
  5. }
  6. }
  7. }


需要注意,在html和css使用alias 必须要前面添加 ~ **

tips: html中使用 12.使用webpack管理项目中的静态资源 - 图3 引入图片等静态资源的时候,需要添加 html-loader 配置。不然也不会处理静态资源路径的问题

图片优化

image-webpack-loader

这个loader不能将图片嵌入应用,所以必须和 url-loader 以及 svg-url-loader 一起使用

image.png

css Sprite 雪碧图

安装

  1. npm i postcss-loader postcss-sprites -D

修改 postcss 的 postcss.config.js , 增加插件的调用

  1. //postcss.config.js
  2. const postcssSprites = require('postccss-sprites')
  3. module.exports = {
  4. plugins:[
  5. postcssScrites({
  6. spritePath:'./src/assets/img'
  7. })
  8. ]
  9. }

修改 webpack.config.js 在 css-loader 之前配置上 postcss-loader (注意loader加载顺序,从后往前)

  1. //webpack.config.js
  2. //rules
  3. {
  4. test: /\.css$/,
  5. use: [
  6. MiniCssExtractPlugin.loader,
  7. "css-loader",
  8. {
  9. loader: "postcss-loader",
  10. },
  11. ],
  12. }

其他资源处理

image.png

面试题

1.webpack 怎么给静态资源加上 CDN域名
2.url-loader 和 file-loader 有什么区别