Skip to content

Commit 1075576

Browse files
committed
perf: adjust caching and parallelization
1 parent 5bab29a commit 1075576

File tree

7 files changed

+60
-47
lines changed

7 files changed

+60
-47
lines changed

packages/@vue/cli-plugin-babel/README.md

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,7 @@ module.exports = {
2020

2121
## Caching
2222

23-
[cache-loader](https://github.com/webpack-contrib/cache-loader) is enabled by default and cache is stored in `<projectRoot>/node_modules/.cache/cache-loader`.
24-
25-
## Parallelization
26-
27-
[thread-loader](https://github.com/webpack-contrib/thread-loader) is enabled by default when the machine has more than 1 CPU cores. This can be turned off by setting `parallel: false` in `vue.config.js`.
23+
[cache-loader](https://github.com/webpack-contrib/cache-loader) is enabled by default and cache is stored in `<projectRoot>/node_modules/.cache/babel-loader`.
2824

2925
## Installing in an Already Created Project
3026

@@ -37,4 +33,3 @@ vue add @vue/babel
3733
- `config.rule('js')`
3834
- `config.rule('js').use('babel-loader')`
3935
- `config.rule('js').use('cache-loader')`
40-
- `config.rule('js').use('thread-loader')`

packages/@vue/cli-plugin-babel/index.js

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
1-
module.exports = (api, {
2-
parallel,
3-
transpileDependencies
4-
}) => {
5-
const useThreads = process.env.NODE_ENV === 'production' && parallel
6-
const cacheDirectory = api.resolve('node_modules/.cache/cache-loader')
1+
module.exports = (api, options) => {
2+
const { genCacheConfig } = require('@vue/cli-shared-utils')
73
const cliServicePath = require('path').dirname(require.resolve('@vue/cli-service'))
84

95
api.chainWebpack(webpackConfig => {
@@ -21,7 +17,7 @@ module.exports = (api, {
2117
return true
2218
}
2319
// check if this is something the user explicitly wants to transpile
24-
if (transpileDependencies.some(dep => filepath.match(dep))) {
20+
if (options.transpileDependencies.some(dep => filepath.match(dep))) {
2521
return false
2622
}
2723
// Don't transpile node_modules
@@ -30,15 +26,9 @@ module.exports = (api, {
3026
.end()
3127
.use('cache-loader')
3228
.loader('cache-loader')
33-
.options({ cacheDirectory })
29+
.options(genCacheConfig(api, options, 'babel-loader', 'babel.config.js'))
3430
.end()
3531

36-
if (useThreads) {
37-
jsRule
38-
.use('thread-loader')
39-
.loader('thread-loader')
40-
}
41-
4232
jsRule
4333
.use('babel-loader')
4434
.loader('babel-loader')

packages/@vue/cli-plugin-typescript/README.md

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,7 @@ If opted to use [TSLint](https://palantir.github.io/tslint/) during project crea
1616

1717
## Caching
1818

19-
[cache-loader](https://github.com/webpack-contrib/cache-loader) is enabled by default and cache is stored in `<projectRoot>/node_modules/.cache/cache-loader`.
20-
21-
## Parallelization
22-
23-
[thread-loader](https://github.com/webpack-contrib/thread-loader) is enabled by default when the machine has more than 1 CPU cores. This can be turned off by setting `parallel: false` in `vue.config.js`.
19+
[cache-loader](https://github.com/webpack-contrib/cache-loader) is enabled by default and cache is stored in `<projectRoot>/node_modules/.cache/ts-loader`.
2420

2521
## Installing in an Already Created Project
2622

@@ -34,5 +30,4 @@ vue add @vue/typescript
3430
- `config.rule('ts').use('ts-loader')`
3531
- `config.rule('ts').use('babel-loader')` (when used alongside `@vue/cli-plugin-babel`)
3632
- `config.rule('ts').use('cache-loader')`
37-
- `config.rule('ts').use('thread-loader')`
3833
- `config.plugin('fork-ts-checker')`

packages/@vue/cli-plugin-typescript/index.js

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
1-
module.exports = (api, {
2-
parallel,
3-
lintOnSave
4-
}) => {
1+
module.exports = (api, options) => {
52
const fs = require('fs')
6-
const useThreads = process.env.NODE_ENV === 'production' && parallel
7-
const cacheDirectory = api.resolve('node_modules/.cache/cache-loader')
3+
const { genCacheConfig } = require('@vue/cli-shared-utils')
4+
const useThreads = process.env.NODE_ENV === 'production' && options.parallel
85

96
api.chainWebpack(config => {
107
config.entry('app')
@@ -26,13 +23,8 @@ module.exports = (api, {
2623

2724
addLoader({
2825
loader: 'cache-loader',
29-
options: { cacheDirectory }
26+
options: genCacheConfig(api, options, 'ts-loader', 'tsconfig.json')
3027
})
31-
if (useThreads) {
32-
addLoader({
33-
loader: 'thread-loader'
34-
})
35-
}
3628

3729
if (api.hasPlugin('babel')) {
3830
addLoader({
@@ -60,7 +52,7 @@ module.exports = (api, {
6052
.plugin('fork-ts-checker')
6153
.use(require('fork-ts-checker-webpack-plugin'), [{
6254
vue: true,
63-
tslint: lintOnSave !== false && fs.existsSync(api.resolve('tslint.json')),
55+
tslint: options.lintOnSave !== false && fs.existsSync(api.resolve('tslint.json')),
6456
formatter: 'codeframe',
6557
// https://github.com/TypeStrong/ts-loader#happypackmode-boolean-defaultfalse
6658
checkSyntacticErrors: useThreads

packages/@vue/cli-service/lib/config/base.js

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ module.exports = (api, options) => {
33
const resolveLocal = require('../util/resolveLocal')
44
const getAssetPath = require('../util/getAssetPath')
55
const inlineLimit = 10000
6+
const useThreads = process.env.NODE_ENV === 'production' && options.parallel
67

78
webpackConfig
89
.context(api.service.context)
@@ -42,16 +43,30 @@ module.exports = (api, options) => {
4243

4344
// vue-loader --------------------------------------------------------------
4445

45-
webpackConfig.module
46+
const { genCacheConfig } = require('@vue/cli-shared-utils')
47+
48+
const vueRule = webpackConfig.module
4649
.rule('vue')
4750
.test(/\.vue$/)
48-
.use('vue-loader')
49-
.loader('vue-loader')
50-
.options({
51-
compilerOptions: {
52-
preserveWhitespace: false
53-
}
54-
})
51+
.use('cache-loader')
52+
.loader('cache-loader')
53+
.options(genCacheConfig(api, options, 'vue-loader'))
54+
.end()
55+
56+
if (useThreads) {
57+
vueRule
58+
.use('thread-loader')
59+
.loader('thread-loader')
60+
}
61+
62+
vueRule
63+
.use('vue-loader')
64+
.loader('vue-loader')
65+
.options({
66+
compilerOptions: {
67+
preserveWhitespace: false
68+
}
69+
})
5570

5671
webpackConfig
5772
.plugin('vue-loader')

packages/@vue/cli-shared-utils/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
[
22
'env',
3+
'cache',
34
'logger',
45
'spinner',
56
'validate',
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
const fs = require('fs')
2+
const path = require('path')
3+
4+
exports.genCacheConfig = (api, options, id, configFile) => {
5+
const cacheDirectory = process.env.VUE_CLI_TEST
6+
? path.resolve(__dirname, `../../../../node_modules/.cache/${id}`)
7+
: api.resolve(`node_modules/.cache/${id}`)
8+
9+
const variables = {
10+
[id]: require(`${id}/package.json`).version,
11+
'cache-loader': require('cache-loader/package.json').version,
12+
env: process.env.NODE_ENV,
13+
test: !!process.env.VUE_CLI_TEST,
14+
config: (options.chainWebpack || '').toString() + (options.configureWebpack || '').toString()
15+
}
16+
if (configFile) {
17+
const file = api.resolve(configFile)
18+
if (fs.existsSync(file)) {
19+
variables.configFile = fs.readFileSync(configFile, 'utf-8')
20+
}
21+
}
22+
const cacheIdentifier = JSON.stringify(variables)
23+
24+
return { cacheDirectory, cacheIdentifier }
25+
}

0 commit comments

Comments
 (0)