webpack启动方式
webpack有两种启动方式:
- 通过
webpack-cli
脚手架来启动,即可以在Terminal
终端直接运行;webpack ./debug/index.js --config ./debug/webpack.config.js
- 通过
require('webpack')
引入包的方式执行;其实第一种方式最终还是会用require
的方式来启动webpack,可以查看./bin/webpack.js
文件
webpack编译的起点
从const compiler = webpack(config)
开始
webpack函数源码(./lib/webpack.js
):
const webpack = (options, callback) => {
let compiler = createCompiler(options)
// 如果传入callback函数,则自启动
if(callback){
compiler.run((err, states) => {
compiler.close((err2)=>{
callbacl(err || err2, states)
})
})
}
return compiler
}
webpack函数执行后返回compiler
对象,在webpack中存在两个非常重要的核心对象,分别为compiler
和compilation
,它们在整个编译过程中被广泛使用。
- Compiler类(
./lib/Compiler.js
):webpack的主要引擎,在compiler对象记录了完整的webpack环境信息,在webpack从启动到结束,compiler
只会生成一次。你可以在compiler
对象上读取到webpack config
信息,outputPath
等; - Compilation类(
./lib/Compilation.js
):代表了一次单一的版本构建和生成资源。compilation
编译作业可以多次执行,比如webpack工作在watch
模式下,每次监测到源文件发生变化时,都会重新实例化一个compilation
对象。一个compilation
对象表现了当前的模块资源、编译生成资源、变化的文件、以及被跟踪依赖的状态信息。
两者的区别?
compiler代表的是不变的webpack环境; compilation代表的是一次编译作业&#x