阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Webpack原理与实践

329次阅读
没有评论

共计 2294 个字符,预计需要花费 6 分钟才能阅读完成。

导读 简单了解了几个常用的插件,一般适合用于任何类型的项目,不管是否使用了框架。webpack 为每个工作环节都预留了合适的钩子,扩展时只需要找到合适的时机去做合适的事情。

Webpack 原理与实践

写在前面

webpack 插件机制的目的是:为了增强 webpack 在项目自动化构建方面的能力。插件最常见的应用场景是:

  • 实现自动在打包之前清除 dist 目录 (上次打包的结果)
  • 自动生成应用所需的 html 文件
  • 根据不同环境为代码注入类似 API 地址这种可能变化的部分
  • 拷贝不需要参与打包的资源文件到输出目录
  • 压缩 webpack 打包完成后输出的文件
  • 自动发布打包结果到服务器实现自动部署
  • 插件机制

    webpack 每次打包的结果都是直接覆盖到 dist 目录,打包前,dist 目录中可能已经存在上一次打包操作时遗留的文件,再次打包时,只能覆盖掉同名文件,已经移除的资源文件会一直累积在里面,最终导致部署上线时出现多余文件。很明显这是不合理的。

    更好的做法当然是:在每次完整打包浅,自动明清理 dist 目录,每次打包过后,dist 目录中就只会存在那些必要的文件。我们可以依赖第三方 npm 包:clean-webpack-plugin。安装后回到 webpack 的配置文件中,导入 clean-webpack-plugin 插件,该插件模块导出 CleanWebpackPlugin。

    //webpack.config.js 
    const path = require("path") 
    const {CleanWebpackPlugin} = require("clean-webpack-plugin") 
    module.exports = { 
      entry:"./src/index.js", 
      output:{filename:"bundle.js",}, 
      mode:"none", 
      plugins:[new CleanWebpackPlugin() 
      ] 
    }
    // src/index.js 
    console.log("nihao nihao");

    打包压缩后的代码:

    /******/ (() => { // webpackBootstrap 
    var __webpack_exports__ = {}; 
    console.log("nihao nihao"); 
    /******/ })() 
    ;

    我们知道 html 文件一般都是通过硬编码的方式,单独存放在项目的根目录下,这种方式有两个问题:

  • 项目发布时,我们需要同时发布根目录下的 html 文件和 dist 目录中所有打包的打包结果,非常麻烦,而且上线后还要确保 html 代码中的资源文件正确
  • 如果打包结果输出的目录或文件名发生变化,那么 html 代码中对应的 script 标签需要我们手动修改路径
  • 为此 webpack 也有相关的插件自动生成 html,相对于之前写死 html 文件的方式,自动生成 html 的优势在于:

  • html 也输出到 dist 目录中,上线时只需要把 dist 目录发布出去
  • html 中的 script 标签是自动引入的,所以可以确保资源文件的路径是正常的
  • 安装后回到配置文件,载入此模块,相对于 clean-webpack-plugin 需要解构内部成员所不同,html-webpack-olugin 插件默认导出的就是插件类型。

    对于生成的 html 文件,页面的 title 需要修改,许多时候还需要我们自定义页面的一些 meta 标签和基础 dom 结构。

    const path = require("path") 
    const {CleanWebpackPlugin} = require("clean-webpack-plugin") 
    const HtmlWebpackPlugin = require("html-webpack-plugin") 
    module.exports = { 
      entry:"./src/index.js", 
      output:{filename:"bundle.js",}, 
      mode:"none", 
      plugins:[new CleanWebpackPlugin(), 
        new HtmlWebpackPlugin({ 
          title:"hello webpack", 
          template:"./src/index.html" 
        }) 
      ] 
    }

    指定要打包的 html 文件:

    html-webpack-olugin 除了可以自定义输出文件内容,同时还可以输出多个 html 文件,通过 HtmlWebpackPlugin 创建的对象是用于生成 index.html 文件的,玩去哪可以再创建一个新的实例对象,用于创建额外的 html 文件。

    对于项目中一些不需要参与构建的静态文件如:网站的 favicon、robots.txt 文件等,但是需要发布在线上。那么可以将这类文件统一放在根目录下的 public 或 static 目录中,希望 webpack 在打包时一并将这个目录下所有的文件复制到输出目录,这种需求可以使用 copy-webpack-plugin 插件的实现。

    plugins:[new CleanWebpackPlugin(), 
      new HtmlWebpackPlugin({ 
        title:"hello webpack", 
        template:"./src/index.html" 
      }), 
      new CopyWebpackPlugin(["public"// 需要拷贝的目录或者路径]) 
    ]
    参考文章

    《webpack 原理与实践》
    《webpack 中文文档》

    写在最后

    简单了解了几个常用的插件,一般适合用于任何类型的项目,不管是否使用了框架。webpack 为每个工作环节都预留了合适的钩子,扩展时只需要找到合适的时机去做合适的事情。

    阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

    腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

    代金券:在阿里云专用满减优惠券

    正文完
    星哥玩云-微信公众号
    post-qrcode
     0
    星锅
    版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计2294字。
    转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
    【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
    阿里云-最新活动爆款每日限量供应
    评论(没有评论)
    验证码
    【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

    星哥玩云

    星哥玩云
    星哥玩云
    分享互联网知识
    用户数
    4
    文章数
    19348
    评论数
    4
    阅读量
    7805415
    文章搜索
    热门文章
    开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

    开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

    开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
    星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

    星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

    星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
    云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

    云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

    云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
    我把用了20年的360安全卫士卸载了

    我把用了20年的360安全卫士卸载了

    我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
    星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

    星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

    星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
    阿里云CDN
    阿里云CDN-提高用户访问的响应速度和成功率
    随机文章
    12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

    12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

    12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...
    手把手教你,购买云服务器并且安装宝塔面板

    手把手教你,购买云服务器并且安装宝塔面板

    手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
    让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

    让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

    让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
    星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

    星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

      星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
    CSDN,你是老太太喝粥——无齿下流!

    CSDN,你是老太太喝粥——无齿下流!

    CSDN,你是老太太喝粥——无齿下流! 大家好,我是星哥,今天才思枯竭,不写技术文章了!来吐槽一下 CSDN。...

    免费图片视频管理工具让灵感库告别混乱

    一言一句话
    -「
    手气不错
    告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

    告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

      告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
    星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

    星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

    星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
    每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

    每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

    每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
    多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

    多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

    多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
    恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

    恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

    恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...