从convert-argv出来后,目前进度在这:

yargs.parse(process.argv.slice(2), (err, argv, output) => {// ...// 从这里出来var options = require("./convert-argv")(yargs, argv);// 跟convert-argv中的一样function ifArg(name, fn, init) { /* ... */ }// 传入返回的optionsfunction processOptions(options) {// ...// 这是个嘛???var outputOptions = options.stats;// 大量的ifArg命令处理outputOptions属性// 获取webpack主函数 var webpack = require("../lib/webpack.js");Error.stackTraceLimit = 30;var lastHash = null;var compiler;try {// 进入主函数compiler = webpack(options);} catch(err) { /* ... */ }// ...编译后回调
    }// 执行上面的函数
    processOptions(options);
});

  声明了一个熟悉的ifArg函数后进入了processOptions函数,接下来是根据一些命名参数处理那个outputOptions属性,我怎么都找不到这个在哪里定义的,知道的人提醒一下。

  因此,直接进入webpack主函数,传入返回的options对象作为参数。

webpack主函数

GO!

  先给一张流程图总览:

  

  主函数简化后源码如下:

const Compiler = require("./Compiler");
// ...模块引入function webpack(options, callback) {// 错误检测const webpackOptionsValidationErrors = validateSchema(webpackOptionsSchema, options);if(webpackOptionsValidationErrors.length) {throw new WebpackOptionsValidationError(webpackOptionsValidationErrors);}let compiler;// 多配置if(Array.isArray(options)) {compiler = new MultiCompiler(options.map(options => webpack(options)));}// 单配置 else if(typeof options === "object") { /*...*/ } else {throw new Error("Invalid argument: options");}if(callback) { /*...*/ }return compiler;
}
exports = module.exports = webpack;webpack.WebpackOptionsDefaulter = WebpackOptionsDefaulter;
// ...属性挂载function exportPlugins( /*...*/ )exportPlugins( /*...*/ );
exportPlugins( /*...*/ );

  可以主要分为以下几块:

1、工具模块引入

2、对配置对象进行错误检测

3、分多配置或单配置进行处理

4、执行回调函数

5、在webpack函数上挂载引入的模块

6、输出一些插件

  

  引入的模块在用到的时候再讲,如果特别复杂的情形会尽量进行简化,不重要的地方也会适当跳过。

  基本上会按照步骤来讲解。

转载于:https://www.cnblogs.com/QH-Jimmy/p/8025827.html

.5-浅析webpack源码之入口函数相关推荐

  1. .17-浅析webpack源码之compile流程-入口函数run

    本节流程如图: 现在正式进入打包流程,起步方法为run: Compiler.prototype.run = (callback) => {const startTime = Date.now() ...

  2. webpack 源码分析(四)——complier模块

    webpack 源码分析(四)--complier模块 上一篇我们看到,webpack-cli 通过 yargs 对命令行传入的参数和配置文件里的配置项做了转换包装,然后传递给 webpack 的 c ...

  3. webpack 源码分析系列 ——loader

    想要更好的格式阅读体验,请查看原文:webpack 源码分析系列 --loader 为什么需要 loader webpack是一个用于现代 JavaScript 应用程序的静态模块打包工具.内部通过构 ...

  4. 与springcloud整合的框架源码读取入口

    前提 最近开始准备系统全面的学习springcloud相关组件,过程中会记录并发表出来,今天就是从阅读源码的入口开始. 提疑 就引入一个依赖 一个注解 怎么就可以将相关功能与springcloud给整 ...

  5. webpack源码阅读——npm脚本运行webpack与命令行输入webpack的区别

    原文地址:webpack源码阅读--npm脚本执行webpack与命令行输入webpack执行的区别 如有错误,欢迎指正! webpack是目前被大家广为使用的模块打包器.从命令行输入webpack或 ...

  6. jQuery源码分析-each函数

    本文部分截取自且行且思 jQuery.each方法用于遍历一个数组或对象,并对当前遍历的元素进行处理,在jQuery使用的频率非常大,下面就这个函数做了详细讲解: 复制代码代码 /*! * jQuer ...

  7. 读 zepto 源码之工具函数

    对角另一面 读 zepto 源码之工具函数 Zepto 提供了丰富的工具函数,下面来一一解读. 源码版本 本文阅读的源码为 zepto1.2.0 $.extend $.extend 方法可以用来扩展目 ...

  8. 帝国cms cj1.php,帝国cms源码中常用函数所在位置

    帝国cms源码中常用函数所在位置 发布时间:2014-03-28 15:00:26   作者:佚名   我要评论 帝国cms常用函数所在位置归总,使用帝国cms的朋友可以收藏下 帝国cms常用函数所在 ...

  9. webpack 源码泄露

    0x01 漏洞简介 webpack是一个JavaScript应用程序的静态资源打包器(module bundler).它会递归构建一个依赖关系图(dependency graph),其中包含应用程序需 ...

最新文章

  1. Nature:希望你在读博士之初就能知道的 20 件事
  2. 模式识别与机器学习课程笔记——决策树和贝叶斯估计
  3. List的remove(对象)操作有时候会报ConcurrentModificationException异常
  4. 99 网络编程_网络工程师技能图谱,看看你会多少技能
  5. ResNet网络总结
  6. 83年的我刚好今年遇到了失业
  7. java 定义动态接口_使用自定义annotation接口进行aspectj动态缓存
  8. PID控制器开发笔记之十二:模糊PID控制器的实现
  9. 小白用Math对象随机生成一个名字
  10. java、.net、IOS、Android自学编程学习视频与资料
  11. 哈尔滨计算机职业学校赵梓琦,哈尔滨赛区复选晋级名单
  12. 农信社计算机类试卷,农信社真题:开封农村信用社计算机考试试题合集
  13. java if 空指针_java 空指针异常(java.lang.NullPointerException)
  14. JS 测试网络速度与网络延迟
  15. 笔记:Stack overflow栈溢出
  16. 联想笔记本:安装适配自己电脑的驱动
  17. ADS和candence如何调用veriloga文件并进行编译?
  18. oracle是否支持gb18030,将oracle字符集改成GB18030
  19. matlab电机外特性曲线,电机大作业(MATLAB仿真电机特性曲线)
  20. 基于Python(Pyecharts)绘制个人足迹地图【100010383】

热门文章

  1. python重新启动整个脚本_每次对脚本进行更改时,都需要在终端中重新启动python...
  2. 加载elementor时出现问题_在使用聚氨酯发泡机时出现问题的解决方法!
  3. Tiny-Event-Manager 安全轻量的资源管理器
  4. Redis Cluster集群知识学习总结
  5. spring aop 声明式事务管理
  6. 企业混合云的VERITAS数据保护方案
  7. EasyUI ComboBox应用示例
  8. OpenResty(nginx)操作redis的初步应用
  9. Python扑克牌发牌(用类实现)
  10. mybatis 级联查询兑现_MyBatis之自查询使用递归实现 N级联动效果(两种实现方式)...