【JavaScript脚本宇宙】探索前端打包利器:从Webpack到Esbuild的全面解析

news2024/7/4 4:54:24

即刻更新,无缝开发:六大打包工具的热重载实战指南

前言

在现代前端开发中,高效的模块打包工具对提高开发效率和代码质量起着至关重要的作用。本文将详细介绍六种流行的JavaScript打包工具:Webpack、Parcel、Vite、Snowpack、Rollup和Esbuild。每个工具都具有独特的功能和优势,特别是在热重载功能方面,这使得开发者能够即时看到代码的修改效果,从而大大提升开发体验。

欢迎订阅专栏:JavaScript脚本宇宙

文章目录

  • 即刻更新,无缝开发:六大打包工具的热重载实战指南
    • 前言
    • 1. Webpack:一个现代JavaScript应用程序的静态模块打包工具
      • 1.1 Webpack简介
        • 1.1.1 历史背景
        • 1.1.2 基本概念
      • 1.2 Webpack热重载功能
        • 1.2.1 热重载的定义
        • 1.2.2 实现原理
      • 1.3 配置Webpack热重载
        • 1.3.1 安装依赖
        • 1.3.2 配置文件示例
        • 1.3.3 常见配置选项
      • 1.4 实践中的Webpack热重载
        • 1.4.1 开发环境设置
        • 1.4.2 错误排查与调试
    • 2. Parcel:一个捆绑器,优秀的开发体验和极快的性能
      • 2.1 Parcel简介
        • 2.1.1 历史背景
        • 2.1.2 基本概念
      • 2.2 Parcel热重载功能
        • 2.2.1 热重载的定义
        • 2.2.2 实现原理
      • 2.3 配置Parcel热重载
        • 2.3.1 安装依赖
        • 2.3.2 配置文件示例
        • 2.3.3 常见配置选项
      • 2.4 实践中的Parcel热重载
        • 2.4.1 开发环境设置
        • 2.4.2 错误排查与调试
    • 3. Vite:下一代前端开发与构建工具
      • 3.1 Vite简介
        • 3.1.1 历史背景
        • 3.1.2 基本概念
      • 3.2 Vite热重载功能
        • 3.2.1 热重载的定义
        • 3.2.2 实现原理
      • 3.3 配置Vite热重载
        • 3.3.1 安装依赖
        • 3.3.2 配置文件示例
        • 3.3.3 常见配置选项
      • 3.4 实践中的Vite热重载
        • 3.4.1 开发环境设置
        • 3.4.2 错误排查与调试
    • 4. Snowpack:零配置快速打包工具
      • 4.1 Snowpack简介
        • 4.1.1 历史背景
        • 4.1.2 基本概念
      • 4.2 Snowpack热重载功能
        • 4.2.1 热重载的定义
        • 4.2.2 实现原理
      • 4.3 配置Snowpack热重载
        • 4.3.1 安装依赖
        • 4.3.2 配置文件示例
        • 4.3.3 常见配置选项
      • 4.4 实践中的Snowpack热重载
        • 4.4.1 开发环境设置
        • 4.4.2 错误排查与调试
    • 5. Rollup:用于构建库的JavaScript模块打包器
      • 5.1 Rollup简介
        • 5.1.1 历史背景
        • 5.1.2 基本概念
      • 5.2 Rollup热重载功能
        • 5.2.1 热重载的定义
        • 5.2.2 实现原理
      • 5.3 配置Rollup热重载
        • 5.3.1 安装依赖
        • 5.3.2 配置文件示例
        • 5.3.3 常见配置选项
      • 5.4 实践中的Rollup热重载
        • 5.4.1 开发环境设置
        • 5.4.2 错误排查与调试
    • 6. Esbuild:极快的JavaScript打包器与压缩工具
      • 6.1 Esbuild简介
        • 6.1.1 历史背景
        • 6.1.2 基本概念
      • 6.2 Esbuild热重载功能
        • 6.2.1 热重载的定义
        • 6.2.2 实现原理
      • 6.3 配置Esbuild热重载
        • 6.3.1 安装依赖
        • 6.3.2 配置文件示例
        • 6.3.3 常见配置选项
      • 6.4 实践中的Esbuild热重载
        • 6.4.1 开发环境设置
        • 6.4.2 错误排查与调试
    • 总结

1. Webpack:一个现代JavaScript应用程序的静态模块打包工具

1.1 Webpack简介

1.1.1 历史背景

Webpack诞生于2012年,由Tobias Koppers开发,目的是解决当时复杂的前端模块依赖管理问题。最初它只是一个简单的捆绑工具,但随着时间的推移,它逐渐发展成为一个功能强大的模块打包工具,被广泛应用于现代JavaScript应用程序开发中。

1.1.2 基本概念

Webpack的核心概念包括:

  • Entry: 入口点,指示Webpack从哪里开始构建依赖图。
  • Output: 输出配置,指示Webpack输出文件的生成位置和命名规则。
  • Loaders: 模块转换器,用于对模块进行转换处理,例如将ES6转为ES5,将TypeScript转为JavaScript等。
  • Plugins: 插件,用于扩展Webpack的功能,如优化打包结果、注入环境变量等。
  • Mode: 构建模式,分为developmentproduction两种,分别对应开发和生产环境。

更多详细信息,请参考Webpack官方文档.

1.2 Webpack热重载功能

1.2.1 热重载的定义

热重载(Hot Module Replacement,简称HMR)是一种在不刷新浏览器的情况下,实时更新代码变化的技术。通过热重载,开发者可以在开发过程中立即看到代码修改的效果,从而提高开发效率。

1.2.2 实现原理

热重载通过以下步骤实现:

  1. Webpack监视源文件的变化。
  2. 当检测到文件变化时,Webpack重新编译相关模块。
  3. 编译后的模块通过WebSocket或其他通信方式传输到浏览器。
  4. 浏览器接收到新的模块后,替换掉旧的模块,而无需刷新整个页面。

1.3 配置Webpack热重载

1.3.1 安装依赖

首先,你需要安装必要的依赖包:

npm install --save-dev webpack webpack-cli webpack-dev-server
1.3.2 配置文件示例

创建一个webpack.config.js文件,并添加如下配置:

const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist'),
  },
  mode: 'development',
  devServer: {
    contentBase: path.join(__dirname, 'dist'),
    compress: true,
    port: 9000,
    hot: true, // 启用热重载
  },
};
1.3.3 常见配置选项
  • contentBase: 指定服务器提供静态文件的目录。
  • compress: 是否开启gzip压缩。
  • port: 开发服务器运行的端口号。
  • hot: 启用热重载功能。

1.4 实践中的Webpack热重载

1.4.1 开发环境设置

为了在开发环境中使用热重载,我们还需要在package.json中添加一个启动脚本:

{
  "scripts": {
    "start": "webpack serve --open"
  }
}

然后,在终端中运行以下命令启动开发服务器:

npm start

此时,Webpack开发服务器将在你设定的端口上运行,并且支持热重载。

1.4.2 错误排查与调试

即使配置正确,有时候也可能出现问题。以下是一些常见的错误和解决方案:

  1. 问题:热重载不起作用

    • 解决方案: 确认devServer.hot是否设置为true,并且确保插件和loader都支持HMR。
  2. 问题:控制台报错

    • 解决方案: 查看具体报错信息,可能是某些模块无法正确加载。检查相应的loader和插件配置是否正确。
  3. 问题:样式未更新

    • 解决方案: 如果使用CSS模块,确保相应的loader(如style-loadercss-loader)已正确配置。

例如,确保安装和配置了style-loadercss-loader

npm install --save-dev style-loader css-loader

webpack.config.js中添加相应的loader配置:

module.exports = {
  // 其他配置项...
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader'],
      },
    ],
  },
};

通过这些配置和实践步骤,你应该能够顺利地在项目中启用Webpack的热重载功能,从而大大提高开发效率。

更多详细信息,请参考Webpack Dev Server文档.

2. Parcel:一个捆绑器,优秀的开发体验和极快的性能

2.1 Parcel简介

2.1.1 历史背景

Parcel 是由 Devbest 开发的一款 JavaScript 应用打包器,于 2017 年首次发布。它旨在通过提供开箱即用的零配置体验,加速 Web 开发过程。Parcel 的设计目标是简化开发者的工作流程,同时提供卓越的性能。

2.1.2 基本概念

Parcel 利用现代浏览器和 Node.js 的特性,自动处理模块依赖和优化代码。其核心理念包括:

  • 零配置:默认情况下无需配置文件即可运行。
  • 模块热重载(HMR):实时更新代码,无需刷新页面。
  • 代码分割:自动进行代码拆分,提高加载速度。

2.2 Parcel热重载功能

2.2.1 热重载的定义

热重载(Hot Module Replacement, HMR)是一种在不重新加载整个页面的情况下,实时替换、更新模块内容的技术。它可以显著提高开发效率,尤其是在大型应用的开发过程中。

2.2.2 实现原理

Parcel 的热重载基于 WebSocket 和模块缓存机制。当源代码发生变化时,Parcel 会通知客户端更新对应模块,而无需重新加载整个页面。具体步骤包括:

  1. 检测代码变动。
  2. 构建新的模块版本。
  3. 通过 WebSocket 通知客户端。
  4. 客户端替换更新后的模块。

2.3 配置Parcel热重载

2.3.1 安装依赖

首先,你需要确保已安装 Node.js 和 npm。然后全局安装 Parcel:

npm install -g parcel-bundler

或者在项目中作为开发依赖安装:

npm install --save-dev parcel-bundler

更多信息请参考 Parcel 官方文档。

2.3.2 配置文件示例

创建一个简单的 HTML 文件,例如 index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Parcel Tutorial</title>
</head>
<body>
    <script src="./index.js"></script>
</body>
</html>

然后创建一个 JavaScript 文件,例如 index.js:

console.log('Hello, Parcel!');

接下来,在终端运行:

parcel index.html

Parcel 将自动处理依赖,并启动一个开发服务器,支持热重载。

2.3.3 常见配置选项

虽然 Parcel 默认不需要配置文件,但你可以在项目根目录下添加 .parcelrc 文件,以自定义配置。例如:

{
  "extends": "@parcel/config-default",
  "transformers": {
    "*.js": ["@parcel/transformer-babel"]
  }
}

2.4 实践中的Parcel热重载

2.4.1 开发环境设置

在实际开发中,你可能希望将 Parcel 集成到 npm 脚本中。在 package.json 中添加以下脚本:

"scripts": {
  "dev": "parcel index.html"
}

然后运行:

npm run dev

Parcel 将启动开发服务器并启用热重载。

2.4.2 错误排查与调试

如果热重载功能未正常工作,可以按以下步骤排查问题:

  1. 检查依赖是否正确安装
    确保 parcel-bundler 已正确安装,并且没有冲突的依赖。

  2. 查看控制台错误信息
    打开浏览器的开发者工具,查看控制台输出的错误信息。

  3. 确保 WebSocket 连接正常
    热重载依赖 WebSocket 连接,确保网络连接正常,没有被防火墙或其他网络设备阻止。

以下是一个完整的 JavaScript 示例,用于测试 Parcel 的热重载功能:

// index.js
document.body.innerHTML = `<h1>${new Date().toLocaleTimeString()}</h1>`;
setInterval(() => {
  document.body.innerHTML = `<h1>${new Date().toLocaleTimeString()}</h1>`;
}, 1000);

console.log('Module loaded');

每次保存 index.js 文件时,页面会自动更新,无需手动刷新。

了解更多详细信息,请访问 Parcel 官方文档。

3. Vite:下一代前端开发与构建工具

3.1 Vite简介

3.1.1 历史背景

Vite 是由 Vue.js 的作者尤雨溪(Evan You)创建的下一代前端开发与构建工具。它旨在解决传统构建工具如 Webpack 和 Parcel 在面对现代 JavaScript 应用时所面临的性能瓶颈和复杂性问题。

3.1.2 基本概念

Vite 的核心思想是利用浏览器原生的 ES 模块支持,以极快的速度启动开发服务器,并通过按需加载模块来提升开发体验。它主要包含两部分:

  • 开发服务器:基于原生 ES 模块的快速热重载。
  • 构建工具:基于 Rollup 的高效打包。

更多详细信息可以参考 Vite 官网。

3.2 Vite热重载功能

3.2.1 热重载的定义

热重载(Hot Module Replacement, HMR)是一种在不刷新整个网页的情况下,通过替换、添加或删除模块来实时更新应用程序的方法。这对于提高开发效率和用户体验非常有帮助。

3.2.2 实现原理

Vite 的热重载功能依赖于浏览器的 ES 模块特性。当源代码发生变化时,Vite 会通知浏览器重新请求变更的模块,并即时替换页面上的相应部分,而无需完全重载页面。

3.3 配置Vite热重载

3.3.1 安装依赖

首先,我们需要安装 Vite 及其依赖。可以使用 npm 或 yarn 来进行安装:

npm init @vitejs/app my-vite-app
cd my-vite-app
npm install

或者使用 Yarn:

yarn create @vitejs/app my-vite-app
cd my-vite-app
yarn
3.3.2 配置文件示例

Vite 的配置文件通常为 vite.config.js。这是一个简单的配置示例:

import { defineConfig } from 'vite'

export default defineConfig({
  server: {
    hmr: true // 启用热重载
  }
})
3.3.3 常见配置选项

以下是一些常见的 Vite 配置选项:

  • root: 项目的根目录,默认为当前工作目录。
  • base: 公共基础路径,默认值为 /
  • server.hmr: 热重载配置,可以是布尔值或对象,用于自定义 HMR 行为。

更多配置选项可以参考 Vite 配置文档.

3.4 实践中的Vite热重载

3.4.1 开发环境设置

在实际开发过程中,我们通常需要启动开发服务器以启用热重载功能:

npm run dev

这将启动 Vite 开发服务器并开启热重载功能,你可以在控制台中看到类似如下的信息:

  VITE v2.0.0-beta.69  ready in 200 ms

  ➜  Local:   http://localhost:3000/
  ➜  Network: use `--host` to expose

此时,修改项目中的任意文件,浏览器会自动更新变更部分。

3.4.2 错误排查与调试

如果在使用 Vite 的热重载功能时遇到问题,可以通过以下步骤进行排查:

  1. 检查配置文件是否正确,确保 hmr 属性已启用。
  2. 查看控制台输出的错误信息,找到可能导致热重载失败的原因。
  3. 确认网络连接正常,如果是在局域网环境下使用,还需检查防火墙设置。

下面是一个简单的 JavaScript 示例,用于验证热重载功能:

// src/main.js

import './style.css'

const app = document.querySelector('#app')
app.innerHTML = `<h1>Hello Vite!</h1>`

if (import.meta.hot) {
  import.meta.hot.accept(() => {
    console.log('HMR is working!')
  })
}

当你修改任何代码并保存时,浏览器将自动更新而无需手动刷新页面。

以上就是如何在 Vite 中配置和使用热重载功能的基本介绍。更多详细信息和高级用法可以参考 Vite 官方文档.

4. Snowpack:零配置快速打包工具

4.1 Snowpack简介

Snowpack 是一个现代的前端构建工具,旨在提供更快、更简单的开发体验。

4.1.1 历史背景

Snowpack 最早由 Pika 团队在2020年推出。其目标是解决传统捆绑工具(如 Webpack)的性能瓶颈,通过将模块按需加载来加速开发过程。

4.1.2 基本概念

Snowpack 使用一种称为“无捆绑”的开发模式,它直接在浏览器中使用原生 ES 模块。这意味着在开发过程中不进行任何捆绑,从而实现即时的文件更新和超快的构建速度。

4.2 Snowpack热重载功能

Snowpack 提供了内置的热重载功能,使开发者能够在编辑代码时立即看到变化,而无需手动刷新页面。

4.2.1 热重载的定义

热重载(Hot Module Replacement, HMR)是一种允许在应用程序运行时替换、添加或删除模块的功能,通常用于开发环境,以提升开发效率。

4.2.2 实现原理

Snowpack 的热重载基于 WebSocket 技术,当检测到文件变化时,服务器会通过 WebSocket 通知客户端更新特定的模块,而不需要重新加载整个页面。

4.3 配置Snowpack热重载

要在项目中使用 Snowpack 的热重载功能,需要先安装相关依赖并进行适当的配置。

4.3.1 安装依赖

首先,通过 npm 或 yarn 安装 Snowpack:

npm install --save-dev snowpack

或者:

yarn add --dev snowpack
4.3.2 配置文件示例

在项目根目录下创建 snowpack.config.js 文件,并添加如下内容:

// snowpack.config.js
module.exports = {
  mount: {
    public: '/',
    src: '/_dist_',
  },
  plugins: [
    '@snowpack/plugin-react-refresh', // 用于React项目的热重载
  ],
  devOptions: {
    open: 'default',
    hmr: true,
  },
};
4.3.3 常见配置选项
  • mount:映射文件夹到 URL 路径。
  • plugins:插件列表,如 React 热重载插件。
  • devOptions:开发服务器选项,如自动打开浏览器(open)和启用热重载(hmr)。

4.4 实践中的Snowpack热重载

下面我们将展示如何在一个实际项目中配置和使用 Snowpack 的热重载功能。

4.4.1 开发环境设置

创建一个简单的 React 项目,并安装所需依赖:

npx create-react-app my-app
cd my-app
npm install --save-dev snowpack @snowpack/plugin-react-refresh

然后配置 snowpack.config.js 如上所示。

4.4.2 错误排查与调试

在开发过程中,如果遇到热重载不起作用,可以尝试以下步骤:

  1. 检查配置文件:确保 snowpack.config.js 中的路径和选项正确。
  2. 查看控制台输出:热重载功能依赖 WebSocket,确保没有相关错误信息。
  3. 确认依赖版本:某些插件可能与 Snowpack 版本不兼容,尝试更新依赖或查阅 官方文档 获取更多帮助。

例如,如果遇到以下错误:

[HMR] Hot Module Replacement is not enabled.

可能是 snowpack.config.js 中的 hmr 选项未启用,检查并修改配置:

devOptions: {
  hmr: true,
},

通过这些步骤,相信可以顺利配置并使用 Snowpack 的热重载功能,提高开发效率。

5. Rollup:用于构建库的JavaScript模块打包器

5.1 Rollup简介

5.1.1 历史背景

Rollup 是一个 JavaScript 模块打包器,最初于 2015 年由 Rich Harris 创建。它旨在将小块代码转换为更复杂的文件,如库或应用程序。与其他打包器如 Webpack 不同,Rollup 更专注于 ES6 模块系统,使开发者能生成高性能、无冗余的代码。

5.1.2 基本概念
  • 模块:独立的代码片段,可以通过 importexport 引入和导出。
  • 打包:将多个模块捆绑成一个文件或一组文件,优化加载和执行。
  • 插件:扩展 Rollup 功能的模块,例如热重载、代码压缩等。

更多信息请参考 Rollup 官方文档。

5.2 Rollup热重载功能

5.2.1 热重载的定义

热重载(Hot Module Replacement, HMR)是一种在应用程序运行时替换、添加或移除模块的技术。无需完全刷新页面,只更新变化的部分,从而大大提升开发效率。

5.2.2 实现原理

热重载依赖于服务端和客户端的双向通信,通过 WebSocket 协议,当代码发生变化时,服务器通知客户端应用更新模块。具体步骤如下:

  1. 文件变动监控:监听文件系统的变化。
  2. 触发事件:变动后通过 WebSocket 通知客户端。
  3. 应用更新:客户端接收到通知后,仅更新变化的模块,而不是整个页面。

5.3 配置Rollup热重载

5.3.1 安装依赖

首先,你需要安装必要的依赖项,包括 Rollup 和 热重载插件:

npm install --save-dev rollup rollup-plugin-hot
5.3.2 配置文件示例

以下是一个基本的 Rollup 配置文件 (rollup.config.js) 示例,启用了热重载功能:

import hot from 'rollup-plugin-hot';

export default {
  input: 'src/main.js',
  output: {
    file: 'public/bundle.js',
    format: 'iife',
    sourcemap: true,
  },
  plugins: [
    hot({
      // HMR options
      include: 'src/**',
    }),
  ],
};
5.3.3 常见配置选项
  • include: 指定需要热重载的文件路径模式。
  • exclude: 排除不需要热重载的文件路径模式。
  • hot: 启用热重载功能。

更多配置选项请参考 rollup-plugin-hot 文档。

5.4 实践中的Rollup热重载

5.4.1 开发环境设置

为了实现热重载,你还需要配置一个开发服务器。可以使用 live-server 或其他类似工具:

npm install --save-dev live-server

然后,在项目根目录下创建一个 server.js 文件:

const liveServer = require('live-server');

liveServer.start({
  port: 8080,
  root: 'public',
  open: true,
  file: 'index.html',
  wait: 1000,
  logLevel: 2,
});

package.json 中添加一个脚本命令:

"scripts": {
  "start": "rollup -c -w & node server.js"
}

运行 npm start 即可启动带有热重载功能的开发服务器。

5.4.2 错误排查与调试

如果遇到热重载无法正常工作的情况,可以按以下步骤进行排查:

  1. 检查 WebSocket 连接: 确保浏览器控制台显示 WebSocket 连接成功。如果失败,确认服务器和客户端的配置是否一致。
  2. 日志输出: 在 Rollup 配置文件和服务器代码中添加日志,查看详细错误信息。
  3. 验证插件设置: 确认 rollup-plugin-hot 是否正确配置,路径匹配是否准确。

完整的调试代码示例如下:

import hot from 'rollup-plugin-hot';

export default {
  input: 'src/main.js',
  output: {
    file: 'public/bundle.js',
    format: 'iife',
    sourcemap: true,
  },
  plugins: [
    hot({
      include: 'src/**',
      verbose: true, // 输出详细日志
    }),
  ],
};

通过以上步骤,相信你能够顺利配置和使用 Rollup 的热重载功能,提高开发效率。

6. Esbuild:极快的JavaScript打包器与压缩工具

6.1 Esbuild简介

6.1.1 历史背景

Esbuild是由Evan Wallace在2020年发布的一个现代化的JavaScript打包器和压缩工具。它以其极快的构建速度而闻名,这主要归功于它使用Go语言编写,从而能充分利用多核CPU并行处理的优势。

6.1.2 基本概念

Esbuild的核心理念是尽可能高效地进行代码转换和打包,包括但不限于以下功能:

  • JavaScript 和 TypeScript 转换。
  • 模块打包。
  • 代码压缩和优化。
  • 支持树摇决(Tree Shaking)。

详细信息可以参考Esbuild官网。

6.2 Esbuild热重载功能

6.2.1 热重载的定义

热重载(Hot Module Replacement,HMR)是一种开发技术,使得应用程序在运行时动态替换模块,而无需完全刷新页面。这对于提升开发效率非常重要。

6.2.2 实现原理

Esbuild通过监视文件系统的变化并自动重新构建受影响的模块来实现热重载。当源文件发生变更时,Esbuild会快速重新编译并将更新后的模块注入到正在运行的应用中。

6.3 配置Esbuild热重载

6.3.1 安装依赖

首先,我们需要安装esbuild以及相关的插件。可以使用npm或者yarn进行安装:

npm install esbuild esbuild-serve --save-dev

或者

yarn add esbuild esbuild-serve --dev
6.3.2 配置文件示例

创建一个esbuild.config.js文件,用于配置Esbuild:

const esbuild = require('esbuild');
const { serve } = require('esbuild-serve');

esbuild.build({
  entryPoints: ['src/index.js'],
  bundle: true,
  outdir: 'dist',
  sourcemap: true,
  plugins: [
    // 其他插件可以在这里添加
  ]
}).then(() => {
  serve({
    servedir: 'dist',
  }, {});
}).catch(() => process.exit(1));
6.3.3 常见配置选项

在配置文件中,可以根据需求调整以下常见选项:

  • entryPoints: 入口文件路径,可以是单个文件或数组。
  • bundle: 是否启用模块打包。
  • outdir: 输出目录。
  • sourcemap: 是否生成源码地图,有助于调试。

更多配置选项请参考官方文档。

6.4 实践中的Esbuild热重载

6.4.1 开发环境设置

运行以下命令启动开发服务器,并开启热重载功能:

node esbuild.config.js

现在,可以访问http://localhost:8000查看应用程序的运行效果。修改src目录下的文件后,浏览器会自动刷新以反映最新的更改。

6.4.2 错误排查与调试

如果遇到问题,可以通过以下方式进行排查和调试:

  • 确认安装的依赖版本是否兼容。
  • 检查配置文件中的路径和选项是否正确。
  • 使用sourcemap选项生成调试信息,以便在浏览器中查看具体出错位置。

详细的错误诊断方法及常见问题解决方案可以参考官方指南。

总结

随着前端技术的不断进步,各种JavaScript打包工具也在快速发展。Webpack已经成为社区中使用最广泛的打包工具,其强大的插件系统和灵活的配置使它适用于各种复杂的项目。Parcel以其零配置和极简用法赢得了开发者的青睐。Vite作为新一代的前端工具,凭借其快速的冷启动时间和模块热替换特性取得了很好的口碑。Snowpack强调零配置和速度,为开发者提供了一种新的体验。Rollup则因其专注于库的打包而被广泛采用。最后,Esbuild以其惊人的打包速度和出色的性能表现迅速崛起。在实际应用中,这些工具的热重载功能显著提升了开发效率,使开发者能即时反馈和快速迭代。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1883980.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言部分复习笔记

1. 指针和数组 数组指针 和 指针数组 int* p1[10]; // 指针数组int (*p2)[10]; // 数组指针 因为 [] 的优先级比 * 高&#xff0c;p先和 [] 结合说明p是一个数组&#xff0c;p先和*结合说明p是一个指针 括号保证p先和*结合&#xff0c;说明p是一个指针变量&#xff0c;然后指…

蒂升电梯职业性格和Verify认知能力SHL测评答题攻略及薪资待遇解密!

​一、蒂升电梯职业性格和认知能力测评考什么 您好&#xff01;蒂升电梯公司邀请您参加的OPQ职业性格测评和Verify认知能力测评是两种常见的评估工具&#xff0c;用于帮助了解个人的职场性格特点和认知能力。 OPQ职业性格测评 这是一种性格测试&#xff0c;通常用于评估个人在…

一文讲解Docker入门到精通

一、引入 1、什么是虚拟化 在计算机中&#xff0c;虚拟化&#xff08;英语&#xff1a;Virtualization&#xff09;是一种资源管理技术&#xff0c;它允许在一台物理机上创建多个独立的虚拟环境&#xff0c;这些环境被称为虚拟机&#xff08;VM&#xff09;。每个虚拟机都可以…

盘古5.0,靠什么去解最难的题?

文&#xff5c;周效敬 编&#xff5c;王一粟 当大模型的竞争开始拼落地&#xff0c;商业化在B端和C端都展开了自由生长。 在B端&#xff0c;借助云计算向千行万业扎根&#xff1b;在C端&#xff0c;通过软件App和智能终端快速迭代。 在华为&#xff0c;这家曾经以通信行业起…

Java登录管理功能的自我理解(尚庭公寓)

登录管理 背景知识 1. 认证方案概述 有两种常见的认证方案&#xff0c;分别是基于Session的认证和基于Token的认证&#xff0c;下面逐一进行介绍 基于Session 基于Session的认证流程如下图所示 该方案的特点 登录用户信息保存在服务端内存&#xff08;Session对象&#xff…

Django 一对多关系

1&#xff0c;创建 Django 应用 Test/app9 django-admin startapp app9 2&#xff0c;注册应用 Test/Test/settings.py 3&#xff0c;添加应用路由 Test/Test/urls.py from django.contrib import admin from django.urls import path, includeurlpatterns [path(admin/,…

安装KB5039212更新卡在25% 或者 96% 进度

系统之家7月1日消息&#xff0c;微软在6月11日的补丁星期二活动中&#xff0c;为Windows 11系统推出了KB5039212更新。然而&#xff0c;部分用户在Windows社区中反映&#xff0c;安装过程中出现失败&#xff0c;进度条在25%或96%时卡住。对于遇到此类问题的Windows 11用户&…

YOLOv8改进 | 主干网络 | C2f融合动态卷积模块ODConv

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40篇内容&#xff0c;内含各种Head检测头、损失函数Loss、…

Linux CentOS 7 离线安装.NET环境

下载 下载.NET 例如&#xff1a; aspnetcore-runtime-6.0.15-linux-x64.tar.gz 复制 复制到如下目录&#xff1a; /usr/local/dotnet/aspnetcore-runtime-6.0.15-linux-x64.tar.gz 解压 cd /usr/local/dotnet/ tar -zxvf aspnetcore-runtime-6.0.15-linux-x64.tar.gz 创建…

非标设备行业的数智化项目管理

近年来&#xff0c;中国制造快速发展&#xff0c;企业迫切需要加快转型升级。与传统制造业相比&#xff0c;高端制造业具有明显的优势&#xff1a;高技术、高附加值、低污染、低排放、竞争优势强。一方面&#xff0c;企业对于生产效率和自动化水平的要求不断提高&#xff0c;期…

esp12实现的网络时钟校准

网络时间的获取是通过向第三方服务器发送GET请求获取并解析出来的。 在本篇博客中&#xff0c;网络时间的获取是一种自动的行为&#xff0c;当系统成功连接WiFi获取到网络天气后&#xff0c;系统将自动获取并解析得到时间和日期&#xff0c;为了减少误差每两分钟左右进行一次校…

qt可点击的QLabel

需求——问题与思路 使用wpf实现一个可点击的超链接label相当简单&#xff08;如下图&#xff09;&#xff0c;但是qt的QLabel不会响应点击事件&#xff0c;那就从QLabel继承一个类&#xff0c;然后在该类中重写mousePressEvent函数&#xff0c;并在该函数中对左键点击事件做响…

人工智能——常用数学基础之线代中的矩阵

1. 矩阵的本质&#xff1a; 矩阵本质上是一种数学结构&#xff0c;它由按照特定规则排列的数字组成&#xff0c;通常被表示为一个二维数组。矩阵可以用于描述一组数据&#xff0c;或者表示某种关系&#xff0c;比如线性变换。 在人工智能中&#xff0c;矩阵常被用来表示数据集…

沉浸感拉满的三模游戏外设神器!谷粒金刚3 Pro游戏手柄开箱试玩

沉浸感拉满的三模游戏外设神器&#xff01;谷粒金刚3 Pro游戏手柄开箱试玩 哈喽小伙伴们好&#xff0c;我是Stark-C~ 对于喜欢打游戏的玩家来说&#xff0c;一款得力的游戏外设绝对是提升游戏体验&#xff0c;增加游戏乐趣的重要神器&#xff01;而在众多的外设中&#xff0c…

全同态加密在大模型应用中应用

密码学简介 上文的图例基本展示了常见加密体系。加密体系&#xff0c;如果用比较正式的描述方法&#xff0c;无疑是做了三件事&#xff1a; 首先&#xff0c;通过一个生成算法 &#x1d43e;&#x1d452;&#x1d466;&#x1d43a;&#x1d452;&#x1d45b;(1&#x1d70…

32.哀家要长脑子了!

1.299. 猜数字游戏 - 力扣&#xff08;LeetCode&#xff09; 公牛还是挺好数的&#xff0c;奶牛。。。妈呀&#xff0c;一朝打回解放前 抓本质抓本质&#xff0c;有多少位非公牛数可以通过重新排列转换公牛数字&#xff0c;意思就是&#xff0c;当这个数不是公牛数字时&#x…

ctfshow web入门 sqli-libs web552--web560

web552 宽字节注入 嗯原理我就不讲了&#xff0c;还是有点复杂后面有时间讲讲 总而言之就是用汉字把\的转义作用抵消了然后正常注入即可 ?id-1包 union select 1,2,3--?id-1包union select 1,(select group_concat(table_name) from information_schema.tables where tab…

ChatGPT-4o医学应用、论文撰写、数据分析与可视化、机器学习建模、病例自动化处理、病情分析与诊断支持

2022年11月30日&#xff0c;可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT-3.5&#xff0c;将人工智能的发展推向了一个新的高度。2023年11月7日&#xff0c;OpenAI首届开发者大会被称为“科技界的春晚”&#xff0c;吸引了全球广大…

如何使用pytest组织自动化测试用例结构?

如何组织自动化测试工程的目录结构&#xff1f;这篇文章介绍了我是如何组织整个自动化工程目录结构的&#xff0c;本篇介绍下我是如何利用pytest框架组织一个测试用例文件的。 用例文件组织原则 整个testsuite目录下整体上按照特性模块划分目录&#xff0c;每个目录下可以只包…

Python容器 之 列表--下标和切片

列表的切片 得到是 新的列表字符串的切片 得到是 新的字符串 如果下标 不存在会报错 list1 [1, 3.14, "hello", False] print(list1)# 获取 列表中 第一个数据 print(list1[0]) # 1# 获取列表中的最后一个数据 print(list1[-1]) # [False]# 获取中间两个数 即 3.1…