Nuxt/lib/builder/webpack/utils/perf-loader.mjs

61 lines
1.2 KiB
JavaScript

import path from 'path'
import threadLoader from 'thread-loader'
// https://github.com/webpack-contrib/thread-loader
// https://github.com/webpack-contrib/cache-loader
export default class PerfLoader {
constructor(builder) {
this.builder = builder
this.options = builder.options
this.workerPools = {
js: {
name: 'js',
poolTimeout: this.options.dev ? Infinity : 2000
},
css: {
name: 'css',
poolTimeout: this.options.dev ? Infinity : 2000
}
}
}
warmup() {
if (!this.options.build.parallel) {
return
}
threadLoader.warmup(this.workerPools.js, ['babel-loader', 'babel-preset-env'])
threadLoader.warmup(this.workerPools.css, ['css-loader'])
}
pool(poolName, _loaders) {
const loaders = [].concat(_loaders)
if (this.options.build.parallel) {
const pool = this.workerPools[poolName]
if (pool) {
loaders.unshift({
loader: 'thread-loader',
options: pool
})
}
}
if (this.options.build.cache) {
loaders.unshift({
loader: 'cache-loader',
options: {
cacheDirectory: path.resolve('node_modules/.cache/cache-loader')
}
})
}
return loaders
}
}