webpack原理篇(五十二):webpack-cli源码阅读

简介: webpack原理篇(五十二):webpack-cli源码阅读

说明

玩转 webpack 学习笔记



webpack-cli 做的事情


  1. 引入 yargs,对命令行进行定制
  2. 分析命令行参数,对各个参数进行转换,组成编译配置项
  3. 引用webpack,根据配置项进行编译和构建



从 NON_COMPILATION_CMD 分析出不需要编译的命令

webpack-cli 处理不需要经过编译的命令

const { NON_COMPILATION_ARGS } = require("./utils/constants");
const NON_COMPILATION_CMD = process.argv.find(arg => {
  if (arg === "serve") {
    global.process.argv = global.process.argv.filter(a => a !== "serve");
    process.argv = global.process.argv;
  }
    return NON_COMPILATION_ARGS.find(a => a === arg);
  });
  if (NON_COMPILATION_CMD) {
    return require("./utils/prompt-command")(NON_COMPILATION_CMD, ...process.argv);
  }
})


b43ede4ca8284814887942299012903f.png


NON_COMPILATION_ARGS 的内容

webpack-cli 提供的不需要编译的命令

const NON_COMPILATION_ARGS = [
  "init", // 创建一份 webpack 配置文件
  "migrate", // 进行 webpack 版本迁移
  "add", // 往 webpack 配置文件中增加属性
  "remove", // 往 webpack 配置文件中删除属性
  "serve", // 运行 webpack-serve
  "generate-loader", // 生成 webpack loader 代码
  "generate-plugin", // 生成 webpack plugin 代码
  "info" // 返回与本地环境相关的一些信息
];



b59bf1a8483a4b6db4af424da4c4d4dc.png


命令行工具包 yargs 介绍

  • 提供命令和分组参数
  • 动态生成 help 帮助信息


image.png


webpack-cli 使用 args 分析


22a662c56829452480f6967c1907b1e0.png


参数分组 (config/config-args.js),将命令划分为9类:


   Config options: 配置相关参数(文件名称、运行环境等)

   Basic options: 基础参数(entry设置、debug模式设置、watch监听设置、devtool设置)

   Module options: 模块参数,给 loader 设置扩展

   Output options: 输出参数(输出路径、输出文件名称)

   Advanced options: 高级用法(记录设置、缓存设置、监听频率、bail等)

   Resolving options: 解析参数(alias 和 解析的文件后缀设置)

   Optimizing options: 优化参数

   Stats options: 统计参数

   options: 通用参数(帮助命令、版本信息等)



2660bc70fafe48dc8a9456e590ac9f5d.png


通过 convert-argv 组装 options 参数

e1a45cf28c8f49a7bc89a6d338d0b1fd.png


处理输出的 outputOptions,看 processOptions 函数


24421fb14d784d42bcba0c499d533bf3.png


d2cde86e3ed641239c7ec5f7a96f6dd3.png



实例化 webpack ,将 options 传给 webpack


3efe6c458b7b43caa911483673b94e7e.png


new 了一个内置的插件 ProgressPlugin,通过有没有 watch 参数去分别执行,最后执行 compilerCallback


8c174cf40f354f61898d9d4bd53fd58f.png



webpack-cli 执行的结果


webpack-cli 对配置文件和命令行参数进行转换最终生成配置选项参数 options

最终会根据配置参数实例化 webpack 对象,然后执行构建流程


目录
相关文章
|
18天前
|
监控 前端开发 JavaScript
Webpack 中 HMR 插件的工作原理
【10月更文挑战第23天】可以进一步深入探讨 HMR 工作原理的具体细节、不同场景下的应用案例,以及与其他相关技术的结合应用等方面的内容。通过全面、系统地了解 HMR 插件的工作原理,能够更好地利用这一功能,为项目的成功开发提供有力保障。同时,要不断关注技术的发展动态,以便及时掌握最新的 HMR 技术和最佳实践。
|
18天前
|
缓存 前端开发 JavaScript
Webpack 动态加载的原理
【10月更文挑战第23天】Webpack 动态加载通过巧妙的机制和策略,实现了模块的按需加载和高效运行,提升了应用程序的性能和用户体验。同时,它也为前端开发提供了更大的灵活性和可扩展性,适应了不断变化的业务需求和技术发展。
|
18天前
|
缓存 前端开发 JavaScript
webpack 原理
【10月更文挑战第23天】Webpack 原理是一个复杂但又非常重要的体系。它通过模块解析、依赖管理、加载器和插件的协作,实现了对各种模块的高效打包和处理,为现代前端项目的开发和部署提供了强大的支持。同时,通过代码分割、按需加载、热模块替换等功能,提升了应用程序的性能和用户体验。随着前端技术的不断发展,Webpack 也在不断演进和完善,以适应不断变化的需求和挑战。
|
1月前
|
缓存 前端开发 JavaScript
Webpack 打包的基本原理
【10月更文挑战第5天】
|
2月前
|
JavaScript 前端开发
手写一个简易bundler打包工具带你了解Webpack原理
该文章通过手写一个简易的打包工具bundler,帮助读者理解Webpack的工作原理,包括模块解析、依赖关系构建、转换源代码以及生成最终输出文件的整个流程。
|
3月前
|
缓存 前端开发 JavaScript
Webpack 模块解析:打包原理、构造形式、扣代码补参数和全局导出
Webpack 模块解析:打包原理、构造形式、扣代码补参数和全局导出
133 1
|
6月前
|
API 开发工具 开发者
webpack热更新原理
Webpack的Hot Module Replacement(HMR)提升开发效率,无需刷新页面即可更新模块。开启HMR需在配置中设`devServer.hot: true`。Webpack构建时插入HMR Runtime,通过WebSocket监听并处理文件变化。当模块改变,Webpack发送更新到浏览器,HMR Runtime找到对应模块进行热替换,保持应用状态。开发者可利用`module.hot` API处理热替换逻辑。
|
6月前
|
前端开发 测试技术 开发者
深入理解 Webpack 热更新原理:提升开发效率的关键
深入理解 Webpack 热更新原理:提升开发效率的关键
|
6月前
|
前端开发 JavaScript 安全
【网络安全】WebPack源码(前端源码)泄露 + jsmap文件还原
【网络安全】WebPack源码(前端源码)泄露 + jsmap文件还原
950 0
|
6月前
|
缓存 前端开发 算法
Webpack 进阶:深入理解其工作原理与优化策略
Webpack 进阶:深入理解其工作原理与优化策略
170 2