写作不易,未经作者允许禁止以任何形式转载!
如果觉得文章不错,欢迎关注、点赞和分享!
原文链接:初识Webpack
Webpck是一个静态的模块化打包工具,为现代的JS应用程序
我们来对上面的解释进行拆解:
Webpack会被Vite取代吗?
关于Vite的思考
学习任何的东西,重要的是学习核心思想
任何工具的出现,都是更好地服务于我们开发
无论是vite的出现,还是以后新的工具出现,不要有任何排斥的思想;
我们要深刻地明白,工具都是为了更好地给我们提供服务
不可能出现了某个工具,让我们的开发效率变得更低,而这个工具却可以变得非常流行,这是不存在的
我们可以通过webpack进行打包,之后运行打包之后的代码
在目录下直接执行webpack命令
webpack
直接在终端执行webpack可能本机安装版本和项目版本不同,所以在package.json中定义命令例如:“build”:“webpack”,这样就会根据package.json中的webpack版本进行打包(前提是已install)。
生成一个dist文件夹,里面存放一个main.js文件,就是打包之后的文件
发现可以正常进行打包的,但是有一个问题,webpack是如何确地入口的?
当然也可以通过配置来指定入口和出口,例如(通常写配置文件)
npx webpack --entry ./src/main.js --output-path ./build
通常情况下,webpack需要打包的项目是非常复杂的,并且我们需要一系列的配置来满足要求,默认配置必然是不可以的。
我们可以在根目录下创建一个webpack.config.js文件,来作为webpack的配置文件,例如
const path = require("path");
module.exports = {
entry: "./src/main.js",
output: {
filename: "bundle.js",
path: path.resolve(__dirname, "build"),
},
};
继续执行webpack命令,依然可以正常打包
也可以不使用webpack.config.js作为文件名,使用命令定义路径和文件名即可,例如
webpack --config ./wk.congfig.js
webpack到底是如何对我们的项目进行打包的呢?
事实上webpack在处理应用程序的时候,它会根据命令或者配置文件找到入门文件;
从入口开始,会生成一个依赖关系图,这个依赖关系图会包含应用程序中所需的所有模块(比如js文件、css文件、字体等)
然后遍历图结构,打包一个个模块(根据文件的不同使用不同的loader解析)
Mode配置选项,可以告知webpack使用响应模式的内置优化:
默认值是production(什么都不设置的情况下);
可选值有:‘none’ | ‘development’ | ‘production’;
这几个选项有什么样的区别呢?
Mode配置代表配置了更多
引用于[万字总结] 一文吃透 Webpack 核心原理
这个过程核心完成了 内容转换 + 资源合并 两种功能,实现上包含三个阶段:
初始化阶段:
构建阶段:
生成阶段:
单次构建过程自上而下按顺序执行,下面会展开聊聊细节,在此之前,对上述提及的各类技术名词不太熟悉的同学,可以先看看简介:
Entry
:编译入口,webpack 编译的起点
Compiler
:编译管理器,webpack 启动后会创建 compiler 对象,该对象一直存活知道结束退出
Compilation
:单次编辑过程的管理器,比如watch = true
时,运行过程中只有一个 compiler
但每次文件变更触发重新编译时,都会创建一个新的 compilation
对象
Dependence
:依赖对象,webpack 基于该类型记录模块间依赖关系
Module
:webpack 内部所有资源都会以“module”对象形式存在,所有关于资源的操作、转译、合并都是以 “module” 为基本单位进行的
Chunk
:编译完成准备输出时,webpack 会将 module
按特定的规则组织成一个一个的 chunk
,这些 chunk
某种程度上跟最终输出一一对应
Loader
:资源内容转换器,其实就是实现从内容 A 转换 B 的转换器
Plugin
:webpack构建过程中,会在特定的时机广播对应的事件,插件监听这些事件,在特定时间点介入编译过程
webpack 编译过程都是围绕着这些关键对象展开的,更详细完整的信息,可以参考 Webpack 知识图谱 。
gulp的核心理念是task runner
webpack的核心理念是module bundler pwebpack是一个模块化的打包工具;
gulp相对于webpack的优缺点:
原文链接:初识Webpack
掘金:前端LeBron
知乎:前端LeBron