返回

多进程打包——thread-loader 剖析

前端

多进程打包:thread-loader 源码(15)

上期我们介绍了 thread-loader 的原理,并分析了父子进程的通信方式,但这还远远不够,要想彻底搞懂 thread-loader,我们还需要分析 thread-loader 中 loaderContext 上的方法。

loaderContext

loaderContext 对象是 webpack 中的一个重要对象,它包含了与当前正在处理的资源有关的大量信息,例如资源的绝对路径、资源的内容、资源的查询参数、资源的上下文等。

thread-loader 中 loaderContext 上的方法主要有以下几个:

  • getOptions():获取 loader 的选项。
  • resourcePath:获取资源的绝对路径。
  • context:获取资源的上下文。
  • query:获取资源的查询参数。
  • async():异步执行一个函数。
  • callback():回调函数。
  • getResolve():获取解析器。
  • emitFile():发射一个文件。
  • addDependency():添加一个依赖。
  • getDependencies():获取依赖。
  • clearDependencies():清除依赖。
  • inputFile:输入文件的内容。
  • output:输出文件的内容。

getOptions()

getOptions() 方法用于获取 loader 的选项。thread-loader 的选项主要有以下几个:

  • workers:指定要使用的 worker 的数量。
  • poolTimeout:指定 worker 池的超时时间。
  • poolSize:指定 worker 池的大小。
  • poolRespawn:指定是否在 worker 退出后重新启动 worker。

resourcePath

resourcePath 属性用于获取资源的绝对路径。

context

context 属性用于获取资源的上下文。

query

query 属性用于获取资源的查询参数。

async()

async() 方法用于异步执行一个函数。

callback()

callback() 方法用于回调函数。

getResolve()

getResolve() 方法用于获取解析器。

emitFile()

emitFile() 方法用于发射一个文件。

addDependency()

addDependency() 方法用于添加一个依赖。

getDependencies()

getDependencies() 方法用于获取依赖。

clearDependencies()

clearDependencies() 方法用于清除依赖。

inputFile

inputFile 属性用于获取输入文件的内容。

output

output 属性用于获取输出文件的内容。

父子进程通信

thread-loader 中父子进程的通信主要通过以下几个方法实现:

  • send():发送消息给 worker。
  • on():监听 worker 的消息。
  • close():关闭 worker。

send()

send() 方法用于发送消息给 worker。

on()

on() 方法用于监听 worker 的消息。

close()

close() 方法用于关闭 worker。

总结

thread-loader 通过父子进程实现文件内容的多进程打包,大大提高了打包速度。loaderContext 对象包含了与当前正在处理的资源有关的大量信息,thread-loader 中 loaderContext 上的方法主要有 getOptions()、resourcePath、context、query、async()、callback()、getResolve()、emitFile()、addDependency()、getDependencies()、clearDependencies()、inputFile 和 output。父子进程的通信主要通过 send()、on() 和 close() 方法实现。