执行webpack发生了什么?
本文主要介绍 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发生了什么?相关推荐
- linux怎么卸载webpack,安装webpack后,执行webpack -v命令时报错:SyntaxError: Block-sc
安装webpack后,执行webpack -v命令时报错如下: [root@FreeServer ~]# webpack -v /usr/local/node-v4.4.7-linux-x64/lib ...
- login.html错误,创建好login.html文件后,在git bash执行webpack出现错误
在view中创建好login.html文件后,将view文件夹中index.html里的代码复制到login.html,并在git bash中执行webpack,出现如下错误. 深色星空@MSI MI ...
- Node.js 执行webpack命令出现的错误
安装 npm install webpack-cli -g 全局安装 webpack-cli 模块 安装 npm install webpack --save-dev 项目中安装以上两个模块后使用 w ...
- 执行transact-sql语句或批处理时发生异常_DAY5-step6 Python异常处理:try, raise,except, finally...
Python中的异常是什么? 异常是在程序执行时发生的错误. 在运行程序时,Python如果发生一个异常,应将其处理以避免程序崩溃. 在Python语言中,异常会在错误时自动触发,或者可以由您的代码触 ...
- 一份比较详细的 webpack 4.x 手工配置基础开发环境 附源码
重新书写了博客内容,希望可以更好的呈现该有的知识点. bundle.js 指的是 webpack 打包后的文件. 小剧场 项目经理:我们要开始一个新的项目,裤裆你来负责项目构建吧. 我:好的没问题,经 ...
- webpack增量打包多页应用
一,webpack打包存在的问题 webpack的打包顺序: var path = require('path'); module.exports = {entry: {one: "./sr ...
- WEBPACK 入门
webpack 入门 1. 什么是webpack 官网介绍:webpack是一个模块打包器.webpack 处理带有依赖关系的模块,生成一系列表示这些模块的静态资源.(webpack is a mod ...
- 前端构建工具之争——Webpack vs Gulp 谁会被拍死在沙滩上
阅读目录 理想的前端开发流程 Gulp 为何物 webpack 又是从哪冒出来的 结论 文章有点长,总共 1800 字,阅读需要 18 分钟.哈哈,没耐心的直接戳我到高潮部分. 理想的前端开发流程 在 ...
- webpack二(以webpack4.x起步)
一.基本安装 首先我们要创建一个目录,初始化npm,以及在本地安装webpack:复制代码 mkdir webpackapp && cd webpackapp复制代码 npm init ...
最新文章
- 服务器宽带性能如何?----internet性能测试站点汇集
- WiresShark 使用方法
- appium---【Mac】Appium-Doctor提示WARN:“ ios_webkit_debug_proxy cannot be found”解决方案...
- MySQL:Innodb DB_ROLL_PTR指针解析
- C语言—静态存储与动态存储
- Algorithm——1.排序.md
- oracle不属于集合操作,Oracle的几个集合操作
- 换位思考的最高境界是换待遇,所以,换位思考就是空话!!!
- Android java传递int类型数组给C
- 获取本地ip地址 C#
- python樱花树画法图片_武大樱花又盛开,用Python画一棵樱花树
- mimics中三维构造,建立MASK
- Python3: chardet 检测 bytes 的原字符串编码格式
- 1221_MISRA_C规范学习_关于函数的规则要求
- 吴恩达 - 机器学习课程笔记(持续更新)
- 力扣动态规划全题型解析【基础、背包、股票、编辑距离、回文】
- nested exception is java.lang.NumberFormatException: For input string: NaN
- 反射+泛型+注解(demo)
- 企业微信私聊安全吗?
- 使用百度统计对网站进行流量分析和统计
热门文章
- iPhone 的倒计时竟然会显示假时间?
- 危险的转变:Python正在从简明转向臃肿,从实用转向媚俗
- 东芝正式退出笔记本电脑业务!
- 10 倍高清不花!大麦端选座 SVG 渲染
- 罗永浩直播首秀开卖小米 10;微信能转账 QQ;Ruby 2.7.1 发布 | 极客头条
- 腾讯云2019年全年营收超170亿元,腾讯健康码累计访问量达80亿次
- 腾讯 QQ 产品已经实现全量上云;中科院计算所发明新编程语言“木兰”;Electron 7.1.9 发布 | 极客头条...
- 从 ACM 班、百度到亚马逊,深度学习大牛李沐的开挂人生
- 刚刚,百度宣布王海峰升任 CTO
- 互联网寒冬资讯分析报告!如何在“大裁员”下逆势而为?