2018-03-23 07:34:55 +00:00
|
|
|
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 {
|
2018-03-30 01:57:30 +00:00
|
|
|
constructor(options) {
|
|
|
|
this.options = options
|
2018-03-30 03:10:49 +00:00
|
|
|
this.threadLoader = threadLoader
|
2018-03-23 07:34:55 +00:00
|
|
|
this.workerPools = {
|
|
|
|
js: {
|
|
|
|
name: 'js',
|
|
|
|
poolTimeout: this.options.dev ? Infinity : 2000
|
|
|
|
|
|
|
|
},
|
|
|
|
css: {
|
|
|
|
name: 'css',
|
|
|
|
poolTimeout: this.options.dev ? Infinity : 2000
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
warmup() {
|
2018-03-30 03:10:49 +00:00
|
|
|
this.threadLoader.warmup(this.workerPools.js, ['babel-loader', 'babel-preset-env'])
|
|
|
|
this.threadLoader.warmup(this.workerPools.css, ['css-loader'])
|
2018-03-23 07:34:55 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
}
|
2018-03-29 19:26:42 +00:00
|
|
|
|
|
|
|
poolOneOf(poolName, oneOfRules) {
|
2018-04-02 10:22:42 +00:00
|
|
|
// disable css thread pool since vue-style-loader needs options like: target
|
|
|
|
if (poolName === 'css' && !this.options.build.extractCSS) {
|
|
|
|
return oneOfRules
|
|
|
|
}
|
2018-03-29 19:26:42 +00:00
|
|
|
return oneOfRules.map(rule => Object.assign({}, rule, {
|
|
|
|
use: this.pool(poolName, rule.use)
|
|
|
|
}))
|
|
|
|
}
|
2018-03-23 07:34:55 +00:00
|
|
|
}
|