当前位置: 首页 > news >正文

篇章十一 打包构建工具

文章目录

    • 一、gulp
      • 1. 流
      • 2. gulp 的作用
      • 3. gulp 的安装、检测和卸载
    • 二、webpack
      • 1. 打包样式资源
      • 2. 打包 html 资源
      • 3. 打包图片资源
      • 4. 压缩 html 代码
      • 5. 生产环境基本配置
    • 三、vite

打包构建工具,都是依赖于 node 环境进行开发,底层封装的内容就是 node 里面的读写文件

一、gulp

gulp 是基于流的打包构建工具

1. 流

  1. 流文件
    • 一种文件传输的格式
    • 一段一段的文件传输
  2. 流格式
    • 从头到尾的一个过程
    • 需要从 源 开始一步一步加工,每一个步骤需要依赖上一步的结果,最终给出一个完整的成品

2. gulp 的作用

  1. 对于 CSS 文件
    • 压缩
    • 转码(自动添加前缀)
  2. 对于 js 文件
    • 压缩
    • 转码(ES6 转 ES5)
  3. 对于 html 文件
    • 压缩
    • 转码(对格式的转换)
  4. 对于静态资源文件处理
  5. 对于第三方文件处理

3. gulp 的安装、检测和卸载

  1. 安装
    • 是一个JavaScript 相关 工具
    • 可以直接使用 npm 进行安装
    • 需要安装在你的电脑里,一次安装多次使用
    • windows:npm install --global gulp
    • mac:sudo npm install --global gulp
  2. 检测:gulp --version
  3. 卸载:npm uninstall --global gulp

https://www.bilibili.com/video/BV1yA411s72G/?vd_source=dea1988d69fb3a1ffe4ad4329ebe71e8

二、webpack

webpack 是基于 js 文件的打包构建工具,它的五个核心概念如下:

  1. Entry:指定入口文件,指示 Webpack 以哪个文件为入口起点开始打包,分析构建内部依赖图
  2. Loader:让 Webpack 能够处理非 JavaScript 文件(因为 webpack 自身只能理解 JavaScript),例如Less
  3. Plugins:插件(Plugins)可以用于执行范围更广的任务,插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量等。
  4. Output:输出,知识 webpack 打包后的输出资源输出到哪里去,以及如何命名
  5. Mode:模式 Mode 指示Webpack 使用相应模式的配置
    • development:能让代码本地调试运行的环境
    • production:能让代码优化上线运行的环境

1. 打包样式资源

  1. 通过 css-loader 把 css 资源 变成 comonjs 模块 加载js 中,里面内容是样式字符串,
  2. 通过 style-loader 创建 style 标签,将 js 中的样式资源插入进行,添加到 head 中生效
  3. 如果遇到 less 资源,会先把 less 转换为 css 再执行上述顺序

2. 打包 html 资源

const {resolve} = require('path')moule.exports = {entry : './src/index.js',output:{filename: 'built.js',path:resolve(_dirname,'build')},module:{rules:[// loader  的配置]},plugins:[// plugins 的配置// html-webpack-plugin// 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)// 需求:需要有结构的 HTML文件new HtmlWebpackPlugin({// 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)template:'./src/index.html'})],mode:'development'
};

3. 打包图片资源

module:{rules:[// loader  的配置{test:/\.less$/,// 要使用多个loader处理用useuse:['style-loader','css-loader','less-loader']},{// 处理图片资源test:/\.(jpg|png|gif)$/,// 使用一个loader// 下载 url-loader,file-loader,npm i  url-loader file-loader-D loader:{// 图片大小小于 8kb,就会被 base64 处理// 优点:减少请求数量(减轻服务器压力)// 缺点:图片体积会更大(文件请求速度更慢)limit: 8*1024,// 解决:当我们因为 url-loader 默认使用es6 模块解析,而 html-loader引入图片是 commonjs ,解析时就会出现问题: [Object Module],因此需要关闭 url-loader的es6模块而使用 commonjs解析esModule: false,// 输出到指定目录下,其他雷同outputPath:'images',// 给图片进行重命名// [hash:10] 取图片的hash的前10位// [ext] 取文件原来的扩展名name: '[hash:10].[ext]'}},{// 处理 html 图片资源test:/\.html$/,// npm i html-loader -D // 处理 html 文件的img 图片(负责引入 img,从而能被 url-loader进行处理)loader: 'html-loader'},]
}

4. 压缩 html 代码

  • webpack.config.js
const {resolve} = require('path')moule.exports = {entry : './src/index.js',output:{filename: 'js/built.js',path:resolve(_dirname,'build')},plugins:[// plugins 的配置// html-webpack-plugin// 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)// 需求:需要有结构的 HTML文件new HtmlWebpackPlugin({// 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)template:'./src/index.html',// 压缩 html 代码minify: {// 移除空格collapseWhitespace: true,// 移除注释removeComments: true}})],mode:'production'
};

5. 生产环境基本配置

const { resolve } = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCssAssetWebpackPlugin = require('optimize-css-asset-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
// 定义 node.js 环境变量,决定使用 browserslist的哪个环境
process.env.NODE_ENV = 'production';
const commonCssLoader = [MiniCssExtractPlugin.loader,'css-loader',{// 还需要在 package.json 中定义 browserslistloader: 'postcss-loader',options:{ident:'postcss',plugins:()=>[require('postcss-preset-env')()]}}
]module.exports = {entry : './src/index.js',output:{filename: 'js/built.js',path:resolve(_dirname,'build')},module:{rules:[{test: '/\.css$/',use: [...commonCssLoader ]},{test: '/\.less$/',use: [...commonCssLoader ,'less-loader']},{test: '/\.js$/',exclude:/node_modules/,loader:'eslint-loader',option:{fix:true}},{test:/\.(jpg|png|gif)/,loader:'url-loadder',options:{limit: 8*1024,name: '[hash:10].[ext]',outputPath:'images',esModule:false}},{test:/\.html$/,loader:'hml-loadder',},{exclude:/\.(js|css|less|html|jpg|png|gif)/,loader: 'file-loader',options:{outputPath:'media'}}]},plugins:[// plugins 的配置// mini-css-extract-pluginnew MiniCssExtractPlugin({filename:'css/built.css'}),// 压缩cssnew OptimizeCssAssetWebpackPlugin(),// html-webpack-pluginnew HtmlWebpackPlugin({// 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)template:'./src/index.html',// 压缩 html 代码minify: {// 移除空格collapseWhitespace: true,// 移除注释removeComments: true}})],mode:'production'
};

三、vite

http://www.lryc.cn/news/471621.html

相关文章:

  • 青少年编程与数学 02-002 Sql Server 数据库应用 06课题、数据库操作
  • MacOS下载安装Logisim(图文教程)
  • Flink CDC系列之:调研应用Flink CDC将 ELT 从 MySQL 流式传输到 StarRocks方案
  • 一次元空间FullGC导致OOM问题分析
  • Web前端开发工具和依赖安装
  • 【学习心得】远程root用户访问服务器中的MySQL8
  • lust变频器维修电梯变频器CDD34.014.W2.1LSPC1
  • 跨越地域限制:在线原型设计软件的自由与便捷
  • flash-waimai:高仿饿了么外卖平台,使用他轻松打造自己的外卖平台
  • 2.5 塑性力学—应变状态
  • 1.机器人抓取与操作介绍-深蓝学院
  • 六,Linux基础环境搭建(CentOS7)- 安装HBase
  • 《计算机网络网络层:连接虚拟世界的关键桥梁》
  • 【AIGC】2024-arXiv-CtrLoRA:一种可扩展且高效的可控图像生成框架
  • 立仪光谱共焦在玻璃上奥秘与应用
  • 【天气识别系统】Python+卷积神经网络算法+人工智能+深度学习+TensorFlow+算法模型训练+Django网页界面
  • MiniCTX:面向大语言模型定理证明的上下文相关基准测试系统
  • 树莓派开发相关知识三PWM控制转速
  • SpringBoot最常用的注解
  • js 获取当前时间与前一个月时间
  • 深度了解flink rpc机制(四) 组件启动流程源码分析
  • C++基于opencv的视频质量检测--遮挡检测
  • 手机玩潜水员戴夫?GameViewer远程如何随时随地玩潜水员戴夫教程
  • UE5 喷射背包
  • 【Vue3】第三篇
  • c++二级指针
  • 客户端存储 — IndexedDB 实现分页查询
  • logback 如何将日志输出到文件
  • Files.newBufferedReader和Files.readAllLines
  • MySQL 数据库备份与恢复全攻略