webpack看这一篇就够了(二)

简介: webpack看这一篇就够了(二)

3.4_webpack-dev-server

目标: 启动本地服务, 可实时更新修改的代码, 打包变化代码到内存中, 然后直接提供端口和网页访问


下载包

yarn add webpack-dev-server -D


配置自定义命令

scripts: {
  "build": "webpack",
  "serve": "webpack serve"
}


运行命令-启动webpack开发服务器

yarn serve
#或者 npm run serve


总结: 以后改了src下的资源代码, 就会直接更新到内存打包, 然后反馈到浏览器上了


3.5_webpack-dev-server配置

  1. Package.json
"scripts": {
  "build": "webpack",
  "serve": "webpack serve --port 8083 --open"
},


  1. 在webpack.config.js中添加服务器配置

更多配置参考这里: https://webpack.docschina.org/configuration/dev-server/#devserverafter

module.exports = {
    // ...其他配置
    devServer: {
      port: 3000, // 端口号
      open: true
    }
}


3.6_加载器 - 处理css文件问题

目标: 自己准备css文件, 引入到webpack入口, 测试webpack是否能打包css文件


1.新建 - src/styles/index.css

2.编写样式

.banner {
  width: 100px;
  height: 100px;
  background-color: hotpink;
}


3.(重要) 一定要引入到入口才会被webpack打包

4.执行打包命令观察效果

07c3bb78366945f0a22797c1a28faa0a.png

总结: 保存原因, 因为webpack默认只能处理js类型文件


3.5_加载器 - 处理css文件

目标: loaders加载器, 可让webpack处理其他类型的文件, 打包到js中

原因: webpack默认只认识 js 文件和 json文件

style-loader文档

css-loader文档


安装依赖

yarn add style-loader css-loader -D


webpack.config.js 配置

const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
    // ...其他代码
    module: { 
        rules: [ // loader的规则
          {
            test: /\.css$/, // 匹配所有的css文件
            // use数组里从右向左运行
            // 先用 css-loader 让webpack能够识别 css 文件的内容并打包
            // 再用 style-loader 将样式, 把css插入到dom中
            use: [ "style-loader", "css-loader"]
          }
        ]
    }
}


总结: 万物皆模块, 引到入口, 才会被webpack打包, css打包进js中, 然后被嵌入在style标签插入dom上


3.6_加载less问题

新建less样式

body {
  .tabs {
    width: 400px;
    height: 40px;
    background-color: pink;
  }
}


引入less样式

import './banner.js'
import './tabs.js'
import './styles/index.css'
console.log(132)


  1. 报错


3.7_加载器 - 处理less文件

目标: less-loader让webpack处理less文件, less模块翻译less代码


less-loader文档

  1. 安装less-loader
yarn add less less-loader -D


webpack.config.js 配置

module: {
  rules: [ // loader的规则
    // ...省略其他
    {
      test: /\.less$/,
      // 使用less-loader, 让webpack处理less文件, 内置还会用less翻译less代码成css内容
        use: [ "style-loader", "css-loader", 'less-loader']
    }
  ]
}


3.8_加载器 - 图片问题

将资源文件复制到项目中


定义盒子结构

<div class="box"></div>
<div class="box2"></div>


通过样式设置背景图

.box {
  width: 100px;
  height: 100px;
  background-image: url(../assets/logo_small.png);
}
.box2 {
  width: 100px;
  height: 100px;
  background-image: url(../assets/1.gif);
}


3.9 _加载器 - 处理图片

目标: 用asset module方式(webpack5版本新增)


在指南里面

asset module文档

如果使用的是webpack5版本的, 直接配置在webpack.config.js - 的 rules里即可

{
    test: /\.(png|jpg|gif|jpeg)$/i,
    type: 'asset'
}


打包看效果 yarn build

如果你用的是webpack4及以前的, 请使用者里的配置作为了解

url-loader文档

file-loader文档


下载依赖包

yarn add url-loader file-loader -D


webpack.config.js 配置

{
  test: /\.(png|jpg|gif|jpeg)$/i,
  use: [
    {
      loader: 'url-loader', // 匹配文件, 尝试转base64字符串打包到js中
      // 配置limit, 超过8k, 不转, file-loader复制, 随机名, 输出文件
      options: {
        limit: 8 * 1024,
      },
    },
  ],
}


  1. src/assets/准备2个图文件
  2. 在css/less/index.less - 把小图片用做背景图
body{
    background: url(../assets/logo_small.png) no-repeat center;
}


  1. 在src/main.js - 把大图插入到创建的img标签上, 添加body上显示
// 引入图片-使用
import imgUrl from './assets/1.gif'
const theImg = document.createElement("img")
theImg.src = imgUrl
document.body.appendChild(theImg)


  1. 打包运行dist/index.html观察2个图片区别

总结: url-loader 把文件转base64 打包进js中, 会有30%的增大, file-loader 把文件直接复制输出


3.10_webpack加载文件优缺点

  • 以8kb进行区分,小于8kb图片转成 base64 字符串
  • 好处就是浏览器不用发请求了,直接可以读取
  • 坏处就是如果图片太大,再转base64就会让图片的体积增大 30% 左右


3.11_加载器 - 处理字体文件

目标: 用asset module技术, asset/resource直接输出到dist目录下


  1. src/assets/ - 放入字体库fonts文件夹
  2. 在main.js引入iconfont.css
// 引入字体图标文件
import './assets/fonts/iconfont.css'


在public/index.html使用字体图标样式

<i class="iconfont icon-weixin"></i>


webpack5使用这个配置,也可以不配置

{ // webpack5默认内部不认识这些文件, 所以当做静态资源直接输出即可
    test: /\.(eot|svg|ttf|woff|woff2)$/,
    type: 'asset/resource',
    generator: {
      filename: 'font-[name].[hash:6][ext]'
    }
}


webpack4及以前使用下面的配置

  1. webpack.config.js - 准备配置
 { // 处理字体图标的解析
     test: /\.(eot|svg|ttf|woff|woff2)$/,
         use: [
             {
                 loader: 'url-loader',
                 options: {
                     limit: 2 * 1024,
                     // 配置输出的文件名
                     name: '[name].[ext]',
                     // 配置输出的文件目录
                     outputPath: "fonts/"
                 }
             }
         ]
 }


  1. 执行打包命令-观察打包后网页效果

总结: url-loader和file-loader 可以打包静态资源文件


3.12_加载器 - 处理高版本js语法

  1. 在main.js中使用箭头函数(高版本js)
class App {
  static a = 123
}
console.log(App.a)


  1. 打包后观察lib/bundle.js

目标: 让webpack对高版本 的js代码, 降级处理后打包


写代码演示: 高版本的js代码(箭头函数、类), 打包后, 直接原封不动打入了js文件中, 遇到一些低版本的浏览器就会报错

原因: webpack 默认仅内置了 模块化的 兼容性处理import export

babel 的介绍 => 用于处理高版本 js语法 的兼容性 babel官网

解决: 让webpack配合babel-loader 对js语法做处理

@babel/core:

@babel/core是babel的核心库,所有的核心Api都在这个库里,这些Api供babel-loader调用

@babel/preset-env:

这是一个预设的插件集合,包含了一组相关的插件,Bable中是通过各种插件来指导如何进行代码转换。该插件包含所有es6转化为es5的翻译规则

babel-loader文档


安装包

yarn add -D babel-loader @babel/core @babel/preset-env


配置规则

module: {
  rules: [
    {
        test: /\.js$/,
        exclude: /(node_modules)/,
        use: {
            loader: 'babel-loader',
            options: {
                presets: ['@babel/preset-env'] // 预设:转码规则(用bable开发环境本来预设的)
            }
        }
    }
  ]
}

总结: babel-loader 可以让webpack 对高版本js语法做降级处理后打包


总结

  • 什么是webpack, 它有什么作用
  • 知道yarn的使用过程, 自定义命令, 下载删除包
  • 有了webpack让模块化开发前端项目成为了可能, 底层需要node支持
  • 对webpack各种配置项了解
  • 入口/出口
  • 插件
  • 加载器
  • mode模式
  • devServer
  • webpack开发服务器的使用和运作过程


目录
相关文章
|
7月前
webpack成长指北第3章---常用webpack命令及使用webpack命令的方式
webpack成长指北第3章---常用webpack命令及使用webpack命令的方式
62 0
|
JavaScript
webpack4主流程源码阅读,以及动手实现一个简单的webpack(二)
webpack4主流程源码阅读,以及动手实现一个简单的webpack
129 0
|
1月前
|
JavaScript 开发者
10天进阶webpack---(1)为什么要有webpack
10天进阶webpack---(1)为什么要有webpack
|
1月前
|
缓存 前端开发 JavaScript
webpack 原理
【10月更文挑战第23天】Webpack 原理是一个复杂但又非常重要的体系。它通过模块解析、依赖管理、加载器和插件的协作,实现了对各种模块的高效打包和处理,为现代前端项目的开发和部署提供了强大的支持。同时,通过代码分割、按需加载、热模块替换等功能,提升了应用程序的性能和用户体验。随着前端技术的不断发展,Webpack 也在不断演进和完善,以适应不断变化的需求和挑战。
|
3月前
|
JSON 前端开发 JavaScript
不会webpack的前端可能是捡来的,万字总结webpack的超入门核心知识
该文章提供了Webpack的基础入门指南,涵盖安装配置、基本使用、加载器(Loaders)、插件(Plugins)的应用,以及如何通过Webpack优化前端项目的打包构建流程。
不会webpack的前端可能是捡来的,万字总结webpack的超入门核心知识
|
7月前
|
缓存 JavaScript 前端开发
webpack超详细教程,学webpack看这一篇就够了!(下)
webpack超详细教程,学webpack看这一篇就够了!(下)
|
7月前
|
缓存 JSON 前端开发
webpack超详细教程,学webpack看这一篇就够了!(上)
webpack超详细教程,学webpack看这一篇就够了!(上)
|
7月前
|
存储 缓存 JavaScript
《Webpack5 核心原理与应用实践》学习笔记-> webpack的loader开发技巧
《Webpack5 核心原理与应用实践》学习笔记-> webpack的loader开发技巧
90 1
|
7月前
|
前端开发 JavaScript 开发者
Webpack知识点总结
Webpack知识点总结
|
7月前
|
前端开发 JavaScript
《Webpack5 核心原理与应用实践》学习笔记-> webpack代码压缩
《Webpack5 核心原理与应用实践》学习笔记-> webpack代码压缩
173 0