thread-loader

Runs the following loaders in a worker pool.

安装

  1. npm install --save-dev thread-loader

用法

把这个 loader 放置在其他 loader 之前, 放置在这个 loader 之后的 loader 就会在一个单独的 worker 池(worker pool)中运行

在 worker 池(worker pool)中运行的 loader 是受到限制的。例如:

  • 这些 loader 不能产生新的文件。
  • 这些 loader 不能使用定制的 loader API(也就是说,通过插件)。
  • 这些 loader 无法获取 webpack 的选项设置。

每个 worker 都是一个单独的有 600ms 限制的 node.js 进程。同时跨进程的数据交换也会被限制。

请仅在耗时的 loader 上使用

示例

webpack.config.js

  1. module.exports = {
  2. module: {
  3. rules: [
  4. {
  5. test: /\.js$/,
  6. include: path.resolve("src"),
  7. use: [
  8. "thread-loader",
  9. // your expensive loader (e.g babel-loader)
  10. ]
  11. }
  12. ]
  13. }
  14. }

可配选项

  1. use: [
  2. {
  3. loader: "thread-loader",
  4. // 有同样配置的 loader 会共享一个 worker 池(worker pool)
  5. options: {
  6. // 产生的 worker 的数量,默认是 (cpu 核心数 - 1)
  7. // 或者,在 require('os').cpus() 是 undefined 时回退至 1
  8. workers: 2,
  9. // 一个 worker 进程中并行执行工作的数量
  10. // 默认为 20
  11. workerParallelJobs: 50,
  12. // 额外的 Node.js 参数
  13. workerNodeArgs: ['--max-old-space-size=1024'],
  14. // Allow to respawn a dead worker pool
  15. // respawning slows down the entire compilation
  16. // and should be set to false for development
  17. poolRespawn: false,
  18. // 闲置时定时删除 worker 进程
  19. // 默认为 500ms
  20. // 可以设置为无穷大, 这样在监视模式(--watch)下可以保持 worker 持续存在
  21. poolTimeout: 2000,
  22. // 池(pool)分配给 worker 的工作数量
  23. // 默认为 200
  24. // 降低这个数值会降低总体的效率,但是会提升工作分布更均一
  25. poolParallelJobs: 50,
  26. // 池(pool)的名称
  27. // 可以修改名称来创建其余选项都一样的池(pool)
  28. name: "my-pool"
  29. }
  30. },
  31. // your expensive loader (e.g babel-loader)
  32. ]

预热

可以通过预热 worker 池(worker pool)来防止启动 worker 时的高延时。

这会启动池(pool)内最大数量的 worker 并把指定的模块载入 node.js 的模块缓存中。

  1. const threadLoader = require('thread-loader');
  2. threadLoader.warmup({
  3. // pool options, like passed to loader options
  4. // must match loader options to boot the correct pool
  5. }, [
  6. // modules to load
  7. // can be any module, i. e.
  8. 'babel-loader',
  9. 'babel-preset-es2015',
  10. 'sass-loader',
  11. ]);

维护人员

thread-loader - 图1


  1. sokra