Webpack thread-loader

2023-05-23 09:33 更新

運(yùn)行以下 loaderworker pool 中。

快速開始

npm install --save-dev thread-loader

使用時,需將此 loader 放置在其他 loader 之前。放置在此 loader 之后的 loader 會在一個獨(dú)立的 worker 池中運(yùn)行。

在 worker 池中運(yùn)行的 loader 是受到限制的。例如:

  • 這些 loader 不能生成新的文件。
  • 這些 loader 不能使用自定義的 loader API(也就是說,不能通過插件來自定義)。
  • 這些 loader 無法獲取 webpack 的配置。

每個 worker 都是一個獨(dú)立的 ?node.js? 進(jìn)程,其開銷大約為 600ms 左右。同時會限制跨進(jìn)程的數(shù)據(jù)交換。

請僅在耗時的操作中使用此 loader!

示例

webpack.config.js

module.exports = {
  module: {
    rules: [
      {
        test: /\.js$/,
        include: path.resolve('src'),
        use: [
          "thread-loader",
          // 耗時的 loader (例如 babel-loader)
        ],
      },
    ],
  },
};

with options

use: [
  {
    loader: "thread-loader",
    // 有同樣配置的 loader 會共享一個 worker 池
    options: {
      // 產(chǎn)生的 worker 的數(shù)量,默認(rèn)是 (cpu 核心數(shù) - 1),或者,
      // 在 require('os').cpus() 是 undefined 時回退至 1
      workers: 2,

      // 一個 worker 進(jìn)程中并行執(zhí)行工作的數(shù)量
      // 默認(rèn)為 20
      workerParallelJobs: 50,

      // 額外的 node.js 參數(shù)
      workerNodeArgs: ['--max-old-space-size=1024'],

      // 允許重新生成一個僵死的 work 池
      // 這個過程會降低整體編譯速度
      // 并且開發(fā)環(huán)境應(yīng)該設(shè)置為 false
      poolRespawn: false,

      // 閑置時定時刪除 worker 進(jìn)程
      // 默認(rèn)為 500(ms)
      // 可以設(shè)置為無窮大,這樣在監(jiān)視模式(--watch)下可以保持 worker 持續(xù)存在
      poolTimeout: 2000,

      // 池分配給 worker 的工作數(shù)量
      // 默認(rèn)為 200
      // 降低這個數(shù)值會降低總體的效率,但是會提升工作分布更均一
      poolParallelJobs: 50,

      // 池的名稱
      // 可以修改名稱來創(chuàng)建其余選項(xiàng)都一樣的池
      name: "my-pool"
    },
  },
  // 耗時的 loader(例如 babel-loader)
];

預(yù)警

可以通過預(yù)警 worker 池來防止啟動 worker 時的高延時。

這會啟動池內(nèi)最大數(shù)量的 worker 并把指定的模塊加載到 ?node.js? 的模塊緩存中。

const threadLoader = require('thread-loader');

threadLoader.warmup(
  {
    // 池選項(xiàng),例如傳遞給 loader 選項(xiàng)
    // 必須匹配 loader 選項(xiàng)才能啟動正確的池
  },
  [
    // 加載模塊
    // 可以是任意模塊,例如
    'babel-loader',
    'babel-preset-es2015',
    'sass-loader',
  ]
);

貢獻(xiàn)

如果還未閱讀貢獻(xiàn)指南,請抽時間進(jìn)行閱讀。

License

MIT


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號