webpack对js文件和eslint做缓存处理

2023-11-13

一、什么是webpack的cache

Webpack的缓存通常是指模块缓存和构建缓存。

1. 模块缓存

通过缓存模块的内容,可以避免重复读取和解析同一个模块的开销。Webpack默认是开启模块缓存的,即第一次编译时会将已经加载的模块信息缓存到内存中,下一次编译时会直接使用缓存中的模块信息,而不是重新解析模块。

2. 构建缓存

Webpack会对每次构建的结果进行Hash值的计算,如果两次构建的Hash值相同,则表示构建结果一致,Webpack就会将构建结果缓存下来。当下一次构建时,如果发现输入文件没有发生改变,则会直接使用之前的缓存。这样可以显著提高构建的速度。

**注意:**在开启构建缓存的情况下,如果某些插件或加载器同时依赖时间戳参数,会导致缓存失效,因此需要注意相关设置

每次打包时 js 文件都要经过 Eslint 检查 和 Babel 编译,速度比较慢。

我们可以缓存之前的 Eslint 检查 和 Babel 编译结果,这样第二次打包时速度就会更快了。

二、配置js和eslint缓存

  module: {
    rules: 
       [
           {
            test: /\.js$/,
            // exclude: /node_modules/, // 排除node_modules代码不编译
            include: path.resolve(__dirname, "../src"), // 也可以用包含
            loader: "babel-loader",
            options: {
              cacheDirectory: true, // 开启babel编译缓存
              cacheCompression: false, // 缓存文件不要压缩
            },
          },
      ]
  },
   plugins: [
    new ESLintWebpackPlugin({
      // 指定检查文件的根目录
      context: path.resolve(__dirname, "../src"),
      exclude: "node_modules", // 默认值
      cache: true, // 开启缓存
      // 缓存目录
      cacheLocation: path.resolve(
        __dirname,
        "../node_modules/.cache/.eslintcache"
      ),
    }),
   ]

完整代码:

  • webpack.prod.js
const path = require("path");
const ESLintWebpackPlugin = require("eslint-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
  entry: "./src/main.js",
  output: {
    path: undefined, // 开发模式没有输出,不需要指定输出目录
    filename: "static/js/main.js", // 将 js 文件输出到 static/js 目录中
    // clean: true, // 开发模式没有输出,不需要清空输出结果
  },
  module: {
    rules: [
      {
        oneOf: [
          {
            // 用来匹配 .css 结尾的文件
            test: /\.css$/,
            // use 数组里面 Loader 执行顺序是从右到左
            use: ["style-loader", "css-loader"],
          },
          {
            test: /\.less$/,
            use: ["style-loader", "css-loader", "less-loader"],
          },
          {
            test: /\.s[ac]ss$/,
            use: ["style-loader", "css-loader", "sass-loader"],
          },
          {
            test: /\.styl$/,
            use: ["style-loader", "css-loader", "stylus-loader"],
          },
          {
            test: /\.(png|jpe?g|gif|webp)$/,
            type: "asset",
            parser: {
              dataUrlCondition: {
                maxSize: 10 * 1024, // 小于10kb的图片会被base64处理
              },
            },
            generator: {
              // 将图片文件输出到 static/imgs 目录中
              // 将图片文件命名 [hash:8][ext][query]
              // [hash:8]: hash值取8位
              // [ext]: 使用之前的文件扩展名
              // [query]: 添加之前的query参数
              filename: "static/imgs/[hash:8][ext][query]",
            },
          },
          {
            test: /\.(ttf|woff2?)$/,
            type: "asset/resource",
            generator: {
              filename: "static/media/[hash:8][ext][query]",
            },
          },
          {
            test: /\.js$/,
            // exclude: /node_modules/, // 排除node_modules代码不编译
            include: path.resolve(__dirname, "../src"), // 也可以用包含
            loader: "babel-loader",
            options: {
              cacheDirectory: true, // 开启babel编译缓存
              cacheCompression: false, // 缓存文件不要压缩
            },
          },
        ],
      },
    ],
  },
  plugins: [
    new ESLintWebpackPlugin({
      // 指定检查文件的根目录
      context: path.resolve(__dirname, "../src"),
      exclude: "node_modules", // 默认值
      cache: true, // 开启缓存
      // 缓存目录
      cacheLocation: path.resolve(
        __dirname,
        "../node_modules/.cache/.eslintcache"
      ),
    }),
    new HtmlWebpackPlugin({
      // 以 public/index.html 为模板创建文件
      // 新的html文件有两个特点:1. 内容和源文件一致 2. 自动引入打包生成的js等资源
      template: path.resolve(__dirname, "../public/index.html"),
    }),
  ],
  // 开发服务器
  devServer: {
    host: "localhost", // 启动服务器域名
    port: "3000", // 启动服务器端口号
    open: true, // 是否自动打开浏览器
    hot: true, // 开启HMR功能
  },
  mode: "development",
  devtool: "cheap-module-source-map",
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

webpack对js文件和eslint做缓存处理 的相关文章

  • 如何在 Chrome 中创建 TouchEvent?

    The W3C规范 http www w3 org TR 2011 WD touch events 20110505 idl def TouchEvent宣称initTouchEvent如下 void initTouchEvent in D
  • Typescript:按值检查对象是否存在于数组中

    我有这个数据 roles roleId 69801 role ADMIN roleId 69806 role SUPER ADMIN roleId 69805 role RB roleId 69804 role PILOTE roleId
  • Twisted 的 Deferred 和 JavaScript 中的 Promise 一样吗?

    我开始在一个需要异步编程的项目中使用 Twisted 并且文档非常好 所以我的问题是 Twisted 中的 Deferred 与 Javascript 中的 Promise 相同吗 如果不是 有什么区别 你的问题的答案是Yes and No
  • ant-d upload中如何为removeFile添加PopConfirm一个图片文件

    我正在使用 Ant d Upload 通过本地系统上传文件 然后单击文件预览图像上的删除图标 图像文件将被删除 我想添加一个弹出确认 所以我尝试在 onRemovefunction 中添加确认作为承诺但它不起作用 它在浏览器中显示警报 on
  • 如何通过 HTML 按钮播放声音

    我目前通过网站播放音乐的方法是通过 HTML 音频标签 不过我希望能够通过 HTML 按钮来播放它 该按钮应该能够在播放和停止之间切换音乐 我在 JSFiddle 创建了一个示例 但不知道如何实现它 有人可以告诉我如何使用我的 JSFidd
  • 将 jquery-mobile 与 Webpack 结合使用

    我正在尝试使用 webpack 加载 jquery mobile 但到目前为止还没有运气 我知道 jquery mobile 依赖于 jquery ui 而 jquery ui 又依赖于 jquery 如何在 Webpack 中设置这样的场
  • 将 Sweet Alert 弹出窗口添加到 React 组件中的按钮

    我为 Bootstrap 和 React 找到了这个完美的 Sweet Alert 模块 我在 Meteor 应用程序中使用它 http djorg83 github io react bootstrap sweetalert http d
  • 将音频与视频流合并 Node.js

    我正在创建 YouTube 视频下载器并且正在使用ytdl core库 它无法下载带有音频的高质量视频 因为 youtube 将其放在另一个文件中 但我需要将其全部下载到一个文件中 我已经这样做了 app get download asyn
  • 保存/导出Chrome的JavaScript控制台输入历史记录

    无论如何 我可以保存或导出 JavaScript 控制台的历史记录吗 input 控制台历史记录 在 Google Chrome 中 我不想保存输出或错误 因此将鼠标悬停在控制台框上 右键单击并选择Save as 不是解决方案 我不想每次都
  • JavaScript 动画平滑滚动

    默认情况下 当您有这样的片段链接时 a href some url some fragment some text a 浏览器立即向下滚动到该片段 我该如何编程才能使用标准 JS 顺利地向下移动到该片段 这是一个例子 Example htt
  • HTML colorpicker 发生变化时如何获取新值?

    我正在开发一个需要更改 HTML 颜色的网络应用程序canvas基于的价值观colorpicker 我有一个colorpicker在我需要获取的 HTML 中value从每次更新开始
  • v-file-input .click() 不是函数

    我试图以编程方式触发 v file input 的 click 事件 因为它在 Vuetify 的文档中 但它显示一个错误this refs imagePicker click is not a function我在这里错过了什么吗 代码重
  • AJAX:检查字符串是否为 JSON?

    我的 JavaScript 有时会在这一行崩溃 var json eval this responseText 当争论时会导致崩溃eval 不是 JSON 在进行此调用之前有什么方法可以检查字符串是否为 JSON 我不想使用框架 有什么方法
  • 如何从顺序键盘导航中删除 Vuetify 附加图标

    在带有 Vuetify 的 Vue js 应用程序中 我有一组用v text field并且其中有一个append icon为了切换文本可见性 如下所示
  • 是否可以使用打字稿映射类型来创建接口的非函数属性类型?

    所以我正在研究 Typescript 的映射类型 是否可以创建一个接口来包装另一种类型 从而从原始类型中删除函数 例如 interface Person name string age number speak void type Data
  • 有关于 PHP 中的 V8JS 的文档吗?

    有没有关于V8JS的文档 我是否只需要标准 PHP 或一些扩展即可使用 V8JS 我将非常感谢有关 PHP 中的 V8JS 的任何信息 要求 PHP 5 3 3 和 V8 库和标头安装在正确的路径中 Install http www php
  • Jquery:选择菜单以显示和隐藏某些div元素

    我正在创建一个选择菜单 根据所选选项显示和隐藏某些 div 像这样的东西
  • 加载另一个 JS 脚本后加载

    这是我的代码 very big js file lots of html stuff 问题是 这些是异步加载的 有没有办法等待第二个脚本直到第一个脚本加载 如果您使用 jQuery 有一个非常简单的方法可以通过获取脚本 https api
  • 当选择下拉列表中的某些值时,取消选中复选框

    当我从下拉列表中选择某个值或用户未从下拉列表中选择任何值时 我需要取消选中复选框 我现在正在使用 Jquery 这是我现在使用的代码 但它不起作用 Script
  • 如何更改订阅值?使用 rxJS

    我正在创建一个计时器 需要你的帮助 我刚刚学习 Angular 和 rxJS 对此我有一些疑问 我正在创建一个具有启动 停止 暂停 重置功能的计时器 并且 btn Reset 必须将我的计时器 暂停 到 300 毫秒 怎么做 D 我的启动定

随机推荐

  • Maven打包详解(“There are test failures”)

    Maven打包详解 There are test failures 以下操作都是在IDEA软件内进行的 第一步 idea界面中选择右边的Maven projects 界面 第二步 选择目标项目文件下的Lifecycle目录下的clean 双
  • 请用前端写一段计算请假时间的代码

    当然可以 首先 我们需要先确定请假时间所需要的信息 比如请假的开始时间和结束时间 然后我们可以使用 JavaScript 的 Date 对象来获取这些信息 并使用 Date getTime 方法来获取它们的毫秒表示形式 接下来就可以计算出两
  • 购物H5商城架构运维之路

    一 引言 公司属于旅游行业 需要将旅游 酒店 购物 聚合到线上商城 通过对会员数据进行聚合 形成大会员系统 从而提供统一的对客窗口 二 业务场景 围绕更加有效地获取用户 提升用户的LTV Life Time Value 生命周期总价值 的整
  • 软件设计师笔记之操作系统基础知识

    操作系统基础知识 考点梳理 操作系统作为计算机科学最为基本的理论基础和分支领域之一是软考中必须重点掌握的知识 1 操作系统的内核 2 操作系统的五大管理功能 进程管理 存储管理 设备管理 文件管理 作业管理 3 网络操作系统和嵌入式操作系统
  • 2020-11-07 layui图片层实现查看大图效果

    之前主要使用element ui和 ant design 框架来实现前端页面 后来在公司需要使用layui开发 一开始接触这个框架感觉美观程度不如之前用的element ui和antd 觉得layui不好用 比较抵触这个框架 后来用多了发现
  • 部署代码生成模型CodeGeeX2

    模型下载 大家需要从huggingface下载CodeGeex2的模型文件 可以直接下载到本地 也可以git clone 这里给huggingface的地址 大家自行下载 THUDM codegeex2 6b Hugging Face 模型
  • pytorch加载保存查看checkpoint文件

    參考以下 https blog csdn net joyce peng article details 104133594 ps 有大佬有CSDN转发博客的实操经验的麻烦分享下
  • GPU服务器上的tensorrt环境搭建

    GPU服务器上的tensorrt环境搭建 文章目录 GPU服务器上的tensorrt环境搭建 1 拉取docker服务器上的支持cuda cudnn的镜像文件 2 设置环境变量并下载相关依赖 2 1安装cuda和cudnn 2 2 pyto
  • python中 什么是描述符?

    文章目录 什么是描述符 动态查找 管理属性 set name 魔术方法 描述符定义 数据验证模块 自定义验证 Goods类的验证 总结 参考文档 什么是描述符 什么是描述符 描述符 是python中一个高级的特性 简单来说 是用来控制 对象
  • 最大化印刷MES管理系统价值,提升印刷车间效率与质量

    印刷MES管理系统 既是对ERP计划及车间现场管理的实时反馈及响应 更是制造执行过程中人 机 料 法 环等资源相互作用 相互配置的最优方案监控 可以让企业获得更多 更有利 更实用的生产制造数据 在这个过程当中 提升效率和质量 降低风险就是印
  • 30天自制操作系统(第02天)–汇编语言学习和MakeFile入门

    第二天 我们将之前的程序进一步翻译成汇编语言 进一步了解启动程序到底做了些啥 还记得第一天中有一部分程序主体么 以及最开头的代码 我们把它们翻译成汇编看看 hello os TAB 4 ORG 0x7c00 指名程序的装载地址 以下一段是标
  • 关于使用快慢指针进行单向链表环存在性判定的若干问题的进一步思考

    文章目录 面试官问这个问题的目的是什么 快慢指针的工作原理 快慢指针究竟几步可以定位环 快指针的速度只能是双倍速么 其他判定单向链表环路的方法 小结 费曼算法 1 写下这个问题 2 真正地努力思考 3 写下解决办法 物理学家Murray G
  • 苹果手机怎样批量删除照片

    https jingyan baidu com article 851fbc37953b183e1f15ab02 html 喜欢使用苹果手机拍照的朋友 会经常删照片 那怎样操作更快呢 今天就为大家分享苹果手机怎样批量删除照片 工具 原料 苹
  • git命令详解

    一 简介 git作为应用广泛的一种分布式版本控制系统 其与svn比较最大的差别就是一个是分布式 一个是集中式 git在每个开发者的本地有一个完整的版本库 当在本地处理工作时 无需联网便可修改提交 当需要与其它开发者交互时 只需要提交自己的修
  • 陀螺研究院×BSN丨解析区块链视角下的消费者权益保护访谈全文发布

    3月是我国消费者权益保护月 在近日播出的3 15晚会中 央视曝光了科勒卫浴 宝马 Max Mara多家知名商店安装人脸识别摄像头 手机清理软件泄露老人隐私 瘦肉精羊等多个极其恶劣的消费者权益侵害行为 可以看出 随着数据时代的渐行渐近 消费者
  • switch怎么切换服务器账号,任天堂eshop如何换区 switch账号如何切换其他服地区

    任天堂eshop里面的游戏因为注册地区不同 游戏的售价也相应不同 因为汇率的影响 游戏的售价产生了高低差价 这种差价可以让玩家买到较低价的游戏 操作起来方法就是在switch里进行账号切换 怎样切换任天堂账号地区呢 一起来看下吧 1 首先需
  • /usr/lib64/sa/sa1脚本解释

    usr lib64 sa sa1脚本解释 前言 脚本原文 脚本解释 附 前言 这个脚本是 Linux 系统上的 sysstat 工具的一部分 在 etc cron d sysstat这个定时任务下执行 用来收集系统性能数据 需要配合 etc
  • 休眠后网络无法自动连接——网卡属性没有电源管理选项

    问题描述 1 每次休眠过后网卡都是无法连接网络的状态 需要手动禁用 gt 开启网卡后才会恢复正常 2 同时网卡属性里没有电源管理选项 环境 Win10 网卡设备 realtek pcie gbe family controller 解决办法
  • 遗传算法超详细图解

    遗传算法 Genetic Algorithm 顾名思义 是一种基于自然选择原理和自然遗传机制的启发式搜索算法 该算法通过模拟自然界中生物遗传进化的自然机制 选择 交叉和变异操作 将好的遗传基因 最优目标 不断遗传给子代 使得后代产生最优解的
  • webpack对js文件和eslint做缓存处理

    一 什么是webpack的cache Webpack的缓存通常是指模块缓存和构建缓存 1 模块缓存 通过缓存模块的内容 可以避免重复读取和解析同一个模块的开销 Webpack默认是开启模块缓存的 即第一次编译时会将已经加载的模块信息缓存到内