本文主要介绍 webpack 和 webpack-cli 模块的关系和部分源码分析。

webpack4.0 以后,似乎执行方式就发生了改变,不再是 webpack 一波流,而是多了一个 webpack-cli。webpack3 中 webpack-cli 是合在 webpack 中。所以在命令行运行 webpack 命令的同时,会提示让你再装一个 webpack-cli。

执行脚本到打包结束流程

1、当我们安装了webpack 模块后,就会在 node_modules/.bin 目录下生成一个 webpack。

在本地环境下,可执行文件放在 node_modules 下的 .bin 文件夹中,npm 为 scripts 字段中的脚本路径自动添加了 node_modules/.bin 前缀,所以可以直接写。

"scripts": {"start": "webpack"
}

而不是

"scripts": {"start": "node_modules/.bin webpack"
}

2、执行 node_modules/.bin/webpack 首先会判断是否安装了 webpack-cli 模块,如果没有安装 webpack-cli 模块就会引导用户去安装,如果已经安装了 webpack-cli 模块,就会去执行 node_modules/webpack-cli/bin/cli 文件。

// node_modules/webpack-cli/bin/cli
const runCLI = require('../lib/bootstrap');
runCLI(process.argv, originalModuleCompile);

node_modules/webpack-cli/bin/cli 使用了 node_modules/webpack-cli/lib/bootstrap

// node_modules/webpack-cli/lib/bootstrap
const runCLI = async (args, originalModuleCompile) => {try {// Create a new instance of the CLI objectconst cli = new WebpackCLI();cli._originalModuleCompile = originalModuleCompile;await cli.run(args);} catch (error) {utils.logger.error(error);process.exit(2);}
};

然后 node_modules/webpack-cli/lib/webpack-cli 会导入 webpack,使用 node_modules/webpack/lib/index 模块,在此模块中会真正创建 compiler 编译对象。

// node_modules/webpack-cli/lib/webpack-cli
class WebpackCLI {constructor() {this.webpack = require('webpack');}async createCompiler(options, callback) {let compiler;try {compiler = this.webpack(config.options,);} catch (error) {if (this.isValidationError(error)) {this.logger.error(error.message);} else {this.logger.error(error);}process.exit(2);}return compiler;}
}

执行 node_modules/webpack/lib/index 文件,会再执行 node_modules/webpack/lib/weback 模块。

然后会调用 node_modules/webpack/lib/Compiler 得到一个 Compiler 函数,运行 Compiler 函数,返回一个 compiler 对象,执行 compiler 中的 run 方法,开始编译。

// node_modules/webpack/lib/weback
const Compiler = require("./Compiler");
const compiler = new Compiler(options.context);
compiler.run((err, stats) => {compiler.close(err2 => {callback(err || err2, stats);});
});

执行webpack发生了什么?相关推荐

  1. linux怎么卸载webpack,安装webpack后,执行webpack -v命令时报错:SyntaxError: Block-sc

    安装webpack后,执行webpack -v命令时报错如下: [root@FreeServer ~]# webpack -v /usr/local/node-v4.4.7-linux-x64/lib ...

  2. login.html错误,创建好login.html文件后,在git bash执行webpack出现错误

    在view中创建好login.html文件后,将view文件夹中index.html里的代码复制到login.html,并在git bash中执行webpack,出现如下错误. 深色星空@MSI MI ...

  3. Node.js 执行webpack命令出现的错误

    安装 npm install webpack-cli -g 全局安装 webpack-cli 模块 安装 npm install webpack --save-dev 项目中安装以上两个模块后使用 w ...

  4. 执行transact-sql语句或批处理时发生异常_DAY5-step6 Python异常处理:try, raise,except, finally...

    Python中的异常是什么? 异常是在程序执行时发生的错误. 在运行程序时,Python如果发生一个异常,应将其处理以避免程序崩溃. 在Python语言中,异常会在错误时自动触发,或者可以由您的代码触 ...

  5. 一份比较详细的 webpack 4.x 手工配置基础开发环境 附源码

    重新书写了博客内容,希望可以更好的呈现该有的知识点. bundle.js 指的是 webpack 打包后的文件. 小剧场 项目经理:我们要开始一个新的项目,裤裆你来负责项目构建吧. 我:好的没问题,经 ...

  6. webpack增量打包多页应用

    一,webpack打包存在的问题 webpack的打包顺序: var path = require('path'); module.exports = {entry: {one: "./sr ...

  7. WEBPACK 入门

    webpack 入门 1. 什么是webpack 官网介绍:webpack是一个模块打包器.webpack 处理带有依赖关系的模块,生成一系列表示这些模块的静态资源.(webpack is a mod ...

  8. 前端构建工具之争——Webpack vs Gulp 谁会被拍死在沙滩上

    阅读目录 理想的前端开发流程 Gulp 为何物 webpack 又是从哪冒出来的 结论 文章有点长,总共 1800 字,阅读需要 18 分钟.哈哈,没耐心的直接戳我到高潮部分. 理想的前端开发流程 在 ...

  9. webpack二(以webpack4.x起步)

    一.基本安装 首先我们要创建一个目录,初始化npm,以及在本地安装webpack:复制代码 mkdir webpackapp && cd webpackapp复制代码 npm init ...

最新文章

  1. 服务器宽带性能如何?----internet性能测试站点汇集
  2. WiresShark 使用方法
  3. appium---【Mac】Appium-Doctor提示WARN:“ ios_webkit_debug_proxy cannot be found”解决方案...
  4. MySQL:Innodb DB_ROLL_PTR指针解析
  5. C语言—静态存储与动态存储
  6. Algorithm——1.排序.md
  7. oracle不属于集合操作,Oracle的几个集合操作
  8. 换位思考的最高境界是换待遇,所以,换位思考就是空话!!!
  9. Android java传递int类型数组给C
  10. 获取本地ip地址 C#
  11. python樱花树画法图片_武大樱花又盛开,用Python画一棵樱花树
  12. mimics中三维构造,建立MASK
  13. Python3: chardet 检测 bytes 的原字符串编码格式
  14. 1221_MISRA_C规范学习_关于函数的规则要求
  15. 吴恩达 - 机器学习课程笔记(持续更新)
  16. 力扣动态规划全题型解析【基础、背包、股票、编辑距离、回文】
  17. nested exception is java.lang.NumberFormatException: For input string: NaN
  18. 反射+泛型+注解(demo)
  19. 企业微信私聊安全吗?
  20. 使用百度统计对网站进行流量分析和统计

热门文章

  1. iPhone 的倒计时竟然会显示假时间?
  2. 危险的转变:Python正在从简明转向臃肿,从实用转向媚俗
  3. 东芝正式退出笔记本电脑业务!
  4. 10 倍高清不花!大麦端选座 SVG 渲染
  5. 罗永浩直播首秀开卖小米 10;微信能转账 QQ;Ruby 2.7.1 发布 | 极客头条
  6. 腾讯云2019年全年营收超170亿元,腾讯健康码累计访问量达80亿次
  7. 腾讯 QQ 产品已经实现全量上云;中科院计算所发明新编程语言“木兰”;Electron 7.1.9 发布 | 极客头条...
  8. 从 ACM 班、百度到亚马逊,深度学习大牛李沐的开挂人生
  9. 刚刚,百度宣布王海峰升任 CTO
  10. 互联网寒冬资讯分析报告!如何在“大裁员”下逆势而为?