前端开发--webpack打包工具

#博学谷IT学习技术支持#

目录

webpack基本概念

webpack的安装

webpack的配置

入口和出口相关配置

插件-自动生成html文件

加载器 - 处理css文件问题

加载器 - 处理图片文件

加载器 - 处理字体文件

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

webpack 开发服务器

webpack基本概念

webpack本质是, 一个第三方模块包, 用于分析, 并打包代码
  • 支持所有类型文件的打包
  • 支持less/sass => css
  • 支持ES6/7/8 => ES5
  • 压缩代码, 提高加载速度

作用:

  1. 减少文件数量
  2. 缩减代码体积
  3. 提高浏览器打开的速度

前端开发--webpack打包工具_第1张图片

webpack的安装

// 初始化包环境
yarn init

// 安装依赖包
yarn add webpack webpack-cli -D

// 配置scripts(自定义命令) 在packjson文件中配置
scripts: {
	"build": "webpack"
}

webpack的配置

入口和出口相关配置

更改webpack打包默认的入口和出口

默认入口: ./src/index.js

默认出口: ./dist/main.js

  1. 新建src并列处, webpack.config.js

前端开发--webpack打包工具_第2张图片

     2.填入配置项

const path = require("path")

module.exports = {
    entry: "./src/main.js", // 入口
    output: { 
        path: path.join(__dirname, "dist"), // 出口路径
        filename: "bundle.js" // 出口文件名
    }
}

     3.在package.json, 自定义打包命令 - 让webpack使用配置文件

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

     4.在终端中输入 yarn build 即可完成打包

插件-自动生成html文件

html-webpack-plugin插件, 让webpack打包后生成html文件并自动引入打包后的js

1.下载插件

yarn add html-webpack-plugin  -D

2.webpack.config.js配置

// 引入自动生成 html 的插件
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
    // ...省略其他代码
    plugins: [
        new HtmlWebpackPlugin({
            template: './public/index.html' // 以此为基准生成打包后html文件
        })
    ]
}

重新打包后观察dist下是否多出html并运行看效果

打包后的index.html自动引入打包后的js文件

加载器 - 处理css文件问题

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

2.编写css样式

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

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

因为webpack默认只认识 js 文件和 json文件,使用loaders加载器, 可让webpack处理其他类型的文件, 打包到js中

1.安装依赖

yarn add style-loader css-loader -D

2.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"]
          }
        ]
    }
}

3.新建src/css/li.css - 去掉li默认样式

ul, li{
    list-style: none;
}

4.引入到main.js (因为这里是入口需要产生关系, 才会被webpack找到打包起来)

import "./css/index.css"

在终端中输入 yarn build  运行打包后dist/index.html观察效果和css引入情况

加载器 - 处理图片文件

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

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

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

加载器 - 处理字体文件

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

webpack5使用这个配置

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

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

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

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

webpack 默认仅内置了 模块化的 兼容性处理

babel: 一个javascript编译器, 把高版本js语法降级处理输出兼容的低版本语法
babel-loader: 可以让webpack转译打包的js代码
1.安装包
// 引入字体图标文件
import './assets/fonts/iconfont.css'

2.配置规则

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

3.在main.js中使用箭头函数(高版本js)

// 高级语法
const fn = () => {
  console.log("你好babel");
}
console.log(fn) // 这里必须打印不能调用/不使用, 不然webpack会精简成一句打印不要函数了/不会编译未使用的代码
// 没有babel集成时, 原样直接打包进lib/bundle.js
// 有babel集成时, 会翻译成普通函数打包进lib/bundle.js

4.打包后观察lib/bundle.js - 被转成成普通函数使用了 - 这就是babel降级翻译的功能

webpack 开发服务器

每次修改代码, 都需要重新 yarn build 打包, 才能看到最新的效果, 实际工作中, 打包 yarn build 非常费时 (30s - 60s) 之间

为什么费时?

  1. 构建依赖

  2. 磁盘读取对应的文件到内存, 才能加载

  3. 用对应的 loader 进行处理

  4. 将处理完的内容, 输出到磁盘指定目录

webpack开发服务器可以在电脑内存中打包, 缓存一些已经打包过的内容, 只重新打包修改的文件, 最终运行加载在内存中给浏览器使用

1. 下载模块包
yarn add webpack-dev-server -D
2. 自定义webpack开发服务器启动命令serve – 在package.json里
scripts: {
	"build": "webpack",
	"serve": "webpack serve"
}
3. 运行命令-启动webpack开发服务器
yarn serve
#或者 npm run serve

每次运行 yarn serve 命令就会把修改后的文件直接更新到内存打包, 然后反馈到浏览器上了

你可能感兴趣的:(webpack,前端,javascript)