Webpack源码浅析

本文深入剖析了Webpack的启动方式,包括直接启动和通过引入包启动。重点解析了Webpack的编译起点,如Compiler和Compilation类,以及process、compiler.run()、compiler.compile()、compilation.seal()和compiler.hooks.emit.callAsync()等关键步骤。Webpack通过Compiler实例化和Compilation对象处理模块依赖关系,形成依赖树,并在编译完成后输出文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

webpack启动方式

webpack有两种启动方式:

  1. 通过webpack-cli脚手架来启动,即可以在Terminal终端直接运行;
    webpack ./debug/index.js --config ./debug/webpack.config.js
    
  2. 通过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中存在两个非常重要的核心对象,分别为compilercompilation,它们在整个编译过程中被广泛使用。

  • 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代表的是一次编译作业,每一次的编译都

根据提供的引用内容,您遇到的问题是安装tensorflow时出现了脚本文件缺失错误。根据引用和引用中提供的信息,您可以尝试以下解决方法: 1. 确保您已经下载并解压了PyMI安装包,可以从提供的链接中获取安装包 [1。 2. 检查您的安装包是否为最新版本,您可以修改setup.py文件中的version为"1.0.4" [1。 3. 确保您已经安装了GitPython,您可以使用命令"pip install GitPython"来进行安装 [2。 4. 如果您在安装Git时遇到问题,您可以尝试从提供的链接中下载Git的安装文件,并进行手动安装 [2。 关于您提到的脚本文件缺失的问题,根据提供的引用内容,无法直接找到与此问题相关的解决方法。可以尝试以下几个步骤来解决该问题: 1. 确保您的安装环境正常,包括正确安装了Anaconda和相关的依赖项。 2. 检查您的路径是否正确,确保脚本文件pip-script.py位于"D:\LenovoQMDownload\SoftMgr\anaconda\anacondaanzhuang\Scripts\"目录下。 3. 检查您的安装是否完整,可以尝试重新安装或修复您的Anaconda环境。 请根据上述提示尝试解决问题,如果问题仍然存在,请提供更多详细信息以便我们更好地帮助您解决问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [win10安装os_win](https://blog.csdn.net/lixingxing35/article/details/104315964)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [.30-浅析webpack源码之doResolve事件流(2)](https://blog.csdn.net/weixin_30677475/article/details/97597140)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值