Webpack第1篇,Webpack初步应用,Webpack基础(Webpack是什么,Webpack的基本使用,Webpack有什么用,如何使用,Webpack手把手教学)

前言

        Webpack 是一款用于现代 JavaScript 应用程序的模块打包工具(module bundler)。它把项目中的所有依赖,包括JavaScript文件、CSS、图片、字体等静态资源,按照你定义的规则和配置,打包成一个或多个优化过的静态文件。这些打包后的文件可以被浏览器加载并运行,使得你的应用可以在Web上运行。

        尽管市场上诞生了众多打包工具,如 Vite、Parcel、Rollup 等,但是 Webpack 凭借拥有着极其丰富的生态系统,仍在模块打包工具中一直保持着领先地位。这里带大家,一起介绍、学习下 Webpack 的初步应用和核心概念。


一. Webpack 详细介绍

1. 介绍和理解

首先,Webpack是一个款前端构建工具,用来进行模块化打包,通过loader转换文件,通过plugin注入钩子,最后输出由多个模块组合成的打包文件。

2. 五大核心概念 

Entry(入口)

Output(输出)

Loaders(加载器)

Plugins(插件)

Mode(模式)

3. 核心概念的具体定义

  1. 入口(Entry) :入口点指示 Webpack 应该从哪个或哪些模块开始打包。它可以是一个字符串(指向单个文件)、数组(指向多个文件)或一个对象(定义多个入口点)。Webpack 会从这里开始递归地查找和处理依赖项。

  2. 输出(Output) :输出配置决定了输出文件的名称、路径和格式。通常情况下,你需要指定输出文件的目录(output.path)和文件名(output.filename)。Webpack 会将所有模块及其依赖项打包到这个指定的输出文件中。

  3. 加载器(Loader) :加载器允许 Webpack 处理非 JavaScript 文件。加载器本质上是可配置的函数,它们接受模块源代码作为输入并输出转换后的代码。例如,你可以使用 babel-loader 来将现代 JavaScript 转换为浏览器兼容的代码,或者使用 file-loader 来处理图片和字体文件。

  4. 插件(Plugin) :插件是具有更广泛功能的 Webpack 扩展点,可以修改编译结果、优化输出、注入 HTML 文件等。插件在特定的时机运行,可以执行更复杂的任务,比如清理旧的 build 文件、压缩代码、生成 source map 等。

  5. 模式(mode):Webpack 支持两种模式:development 和 production。每种模式都有默认的优化设置,例如在生产模式下会自动开启代码压缩。


二.Webpack 初步使用

1. 创建测试环境

首先,我们模拟项目目录,分别创建public、src文件夹,以及 public>index.html 文件和src>main.js>、src>js>clone.js、src>js>sum.js文件,用于初步环境的应用,然后在文件夹中分别写入文件内容。

首先是, src > js > clone.js、

// clone.js
export default function Clone(obj) {
    console.log("Clone.js")
    if (typeof obj !== "object" || obj === null) { return obj }
    let res = Array.isArray(obj) ? [] : {};
    for (let key in obj) {
        if (obj.hasOwnProperty(key)) {
            res[key] = deepClone(obj[key]);
        }
    }
    return res;
}

然后是,src > js > sum.js、

// sum.js
export default function Sum(...arr) {
    console.log("Sum.js")
    return arr.reduce((prev, cur) => prev + cur, 0)
}

src > main.js、

// main.js
import Clone from "./js/clone"
import Sum from "./js/sum"


var obj = {
    name: "longlong",
    age: 18,
    status: {
        hoppy: "sduty",
    }
}
console.log(Sum(1, 2, 3, 4, 5), 123)
console.log(Clone(obj.name = "test"), obj, 456)

index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Webpack</title>
  </head>
  <body>
    <h1>Webpack 初步使用</h1>
    <script src="../src/main.js"></script>
  </body>
</html>

最后,我们打开 index.html 文件

可以看到控制台直接报错,这个报错表示在一个没有被视为模块的 JavaScript 文件中使用了 import 语句。这是因为ES6模块语法,在浏览器中是并不识别的,而JavaScript 文件在浏览器和 Node.js 环境中使用的是非模块化的脚本语法(也称为脚本模式)。在这种模式下,importexport 语句是无效的。

所以如果你在非模块化的 JavaScript 文件中使用 import 语句,会导致 Uncaught SyntaxError: Cannot use import statement outside a module 错误。

要使用模块语法,需要明确告诉 JavaScript 运行时环境(浏览器或 Node.js)该文件应该被当作一个模块处理。这时候就需要用到 Webpack 进行编译,构建成浏览器能识别的语法。

2. 初步实际应用

(1)初始化命令

要想使用 Webpack 构建工具,我们需要把依赖包下载下来才能使用,所以这里我们首先需要,初始化一个新的 npm 项目。直接在文件夹根目录,执行以下命令,生成 package.json 初始文件

npm init -y

这里的npm init -y 是 Node.js 包管理器(npm)提供的一个命令,用于快速初始化一个新的 npm 项目。这个命令的作用是创建一个默认的 package.json 文件,包含项目的基本配置信息。

可以看到根目录执行 npm init -y ,生成 package.json 文件。


(2)修改路径

这里需要将 package.json 文件中的主文件路径"main": "index.js",修改成自己需要的路径

"main": "./src/main.js",


(3)安装打包工具和命令行工具

直接执行以下命令,安装到开发环境,依赖项仅在开发过程中需要,而不是在生产环境中

npm i webpack webpack-cli -D

安装介绍:

Webpack 是一个静态模块打包工具,用于将应用程序的所有依赖(包括 JavaScript、CSS、图像等)打包成一个或多个优化过的文件。

Webpack CLI(命令行界面)是 Webpack 的命令行工具,用于与 Webpack 进行交互。它允许开发者通过命令行配置和运行 Webpack 的打包过程。

安装完成后,可以在 package.json 文件中看到,同时还会生成 node_modules 文件,

然后就就可以执行 webpack 相关命令了。


(4)注意事项

  1. webpack代码外层文件不能有中文,且必须是安装了nodejs才能使用。

  2. 文件名字,就是  "name": "wpbk_init",不能以 webpack 命名,容易冲突,可能会出现 npm init -y 安装不下来的情况。


(5)执行打包命令,启用 Webpack

执行以下命令时,会使用webpack ,指定打包文件./src/main.js,并且输出到开发环境/生产环境

npx webpack ./src/main.js --mode=development       

// 打包指定文件./src/main.js,输出到开发环境

npx webpack ./src/main.js --mode=production

// 打包指定文件./src/main.js,输出到生产环境

打包完成后,会生成 dist 目录

和打包信息


(6)打包结果

这里我们直接将 index.html 中的 src>main.js 路径,换成打包后 dist>main.js 文件路径

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Webpack</title>
  </head>
  <body>
    <h1>Webpack 初步使用</h1>
    <script src="../dist/main.js"></script>
  </body>
</html>

然后打开控制台,查看,

可以看到 main.js 中的函数执行成功。


(7)打包区别

        One. 开发环境

执行 npx webpack ./src/main.js --mode=development 后,

npx webpack ./src/main.js --mode=development命令使用开发模式进行打包,生成未压缩的代码,支持调试和源映射,适合开发过程中使用。

        Two. 生产环境

执行 npx webpack ./src/main.js --mode=production 后,

npx webpack ./src/main.js --mode=production 命令使用生产模式进行打包,生成经过优化和压缩的代码,适合部署到生产环境。

当然,开发和生产环境,代码同样都没有问题,可以正常执行。


(8)小结

  1. Webpack打包的本质,就是将浏览器不能识别的语法,编译成浏览器能识别的语法。
  2. 这里执行打包命令后,如果更改sum.js、clone.js、main.js文件内容时不再生效,需要重新打包后生效。
  3. Webpack 本身功能较少,只能处理 JS 资源,一旦遇到 CSS 等其它资源就会报错。所以我们学习 webpack ,就是主要学习如何处理其它资源。


(9)大致流程

1、npm init -y                                                 

// 初始化,生成package.json文件

2、./src/main.js                                              

// 修改打包文件路径

3、npm i webpack webpack-cli -D                 

// 配置安装打包器和命令行工具

4、npx webpack ./src/main.js --mode=development

// 指定打包文件和输出到:开发环境

5、npx webpack ./src/main.js --mode=production

// 指定打包文件和输出到:生产环境


三. Webpack 扩展

除了以上的简单应用,还有一些其他重要的核心概念和配置选项,这些对于高级使用和优化 Webpack 配置非常重要。请看以下

1. Modules(模块)

Webpack 的核心是模块化打包。模块可以是 JavaScript 文件、CSS 文件、图片或其他资源。Webpack 会递归地解析入口文件的所有依赖,将其打包到输出文件中。模块化的好处在于代码分离和重用,能让项目更加结构化和可维护。


2. Chunk(代码块)

Chunk 是 Webpack 生成的一个代码块,它包含了多个模块。Webpack 在构建过程中将代码拆分成不同的 chunks,以实现更高效的加载和优化。Chunk 使得按需加载、懒加载和代码分割成为可能。


3. Configuration(配置)

Webpack 通过 webpack.config.js 文件进行配置。这些配置选项定义了 Webpack 如何处理、打包和优化项目中的文件。配置文件可以包含 entry、output、module、plugins、resolve 等部分。


4. DevServer(开发服务器)

webpack-dev-server 提供了一个本地开发服务器,支持实时重新加载和热模块替换。它能够提升开发效率,使得每次代码修改后不需要手动刷新浏览器即可查看更改效果。


5. HMR(Hot Module Replacement,热模块替换)

HMR 是一种开发模式下的功能,允许你在应用运行时替换、添加或删除模块,而无需完全刷新页面。这极大地提高了开发效率,避免了重新加载应用的开销。


6. Tree Shaking(树摇)

Tree Shaking 是一种优化技术,用于去除未使用的代码。它依赖于 ES6 的模块系统,通过静态分析来确定哪些代码实际上被使用,从而移除那些未被引用的部分,减小最终包的体积。


7. Code Splitting(代码分割)

Code Splitting 允许将应用程序的代码拆分成多个 chunks,这样可以按需加载或并行加载。Webpack 支持几种不同的代码分割方法,包括:

  • 入口点代码分割:通过多个入口点拆分代码。
  • 动态导入:使用 import() 函数进行按需加载。
  • Vendor 分割:将第三方库单独打包,减少主应用的体积。

8. Optimization(优化)

Webpack 提供了多种优化选项来提升构建效率和最终文件的性能:

  • 代码压缩:使用插件如 TerserPlugin 进行代码压缩。
  • 长效缓存:通过哈希值来优化浏览器缓存。
  • 去重:自动移除重复的依赖。
  • 分离 runtime 和 manifest:优化 Webpack 的运行时和 manifest 文件。

9. Resolve(解析)

resolve 配置选项告诉 Webpack 如何寻找模块的文件,包括模块的路径、扩展名、别名等。这有助于简化模块导入路径和提高构建效率。


10. Alias(别名)

Alias 配置用于简化模块的引用路径。通过为常用路径设置别名,可以减少模块导入的复杂性,使代码更加简洁和易于维护。


11. 关键技术,实际应用

  • 热加载webpack-dev-server 和 HMR 是提高开发效率的工具,使得代码更改能即时反映在浏览器中。
  • 性能优化:通过 Tree Shaking、Code Splitting 和优化配置来减小最终输出文件的体积,提高应用性能。

这些概念和技术的合理应用可以使 Webpack 成为一个强大的构建工具,帮助我们高效地开发、构建和优化现代 JavaScript 应用。后续有时间,持续更新


四. 更多,请看

Webpack 官网icon-default.png?t=N7T8https://webpack.js.org/

Webpack 中文网icon-default.png?t=N7T8https://webpack.docschina.org/

创作不易,感觉有用,就一键三连,感谢(●'◡'●)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北城笑笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值