Skip to content

Commit dfdc00c

Browse files
committed
perf: vastly improve rebuild perf with caching
1 parent aaf3aef commit dfdc00c

File tree

3 files changed

+65
-27
lines changed

3 files changed

+65
-27
lines changed

lib/webpack/createBaseConfig.js

+50-22
Original file line numberDiff line numberDiff line change
@@ -67,16 +67,55 @@ module.exports = function createBaseConfig ({
6767
config.module
6868
.noParse(/^(vue|vue-router|vuex|vuex-router-sync)$/)
6969

70-
config.module
71-
.rule('vue')
72-
.test(/\.vue$/)
70+
const cacheDirectory = path.resolve(__dirname, '../../node_modules/.cache/vuepress')
71+
const cacheIdentifier = JSON.stringify({
72+
vuepress: require('../../package.json').version,
73+
'cache-loader': require('cache-loader').version,
74+
'vue-loader': require('vue-loader').version,
75+
env: process.env.NODE_ENV,
76+
config: (
77+
(siteConfig.chainWebpack || '').toString() +
78+
(siteConfig.configureWebpack || '').toString()
79+
)
80+
})
81+
82+
function applyVuePipeline (rule) {
83+
rule
84+
.use('cache-loader')
85+
.loader('cache-loader')
86+
.options({
87+
cacheDirectory,
88+
cacheIdentifier
89+
})
90+
91+
rule
7392
.use('vue-loader')
7493
.loader('vue-loader')
7594
.options({
7695
compilerOptions: {
7796
preserveWhitespace: false
78-
}
97+
},
98+
cacheDirectory,
99+
cacheIdentifier
79100
})
101+
}
102+
103+
const vueRule = config.module
104+
.rule('vue')
105+
.test(/\.vue$/)
106+
107+
applyVuePipeline(vueRule)
108+
109+
const mdRule = config.module
110+
.rule('markdown')
111+
.test(/\.md$/)
112+
113+
applyVuePipeline(mdRule)
114+
115+
mdRule
116+
.use('markdown-loader')
117+
.loader(require.resolve('./markdownLoader'))
118+
.options({ sourceDir, markdown })
80119

81120
config.module
82121
.rule('pug')
@@ -102,6 +141,13 @@ module.exports = function createBaseConfig ({
102141
// Don't transpile node_modules
103142
return /node_modules/.test(filepath)
104143
}).end()
144+
.use('cache-loader')
145+
.loader('cache-loader')
146+
.options({
147+
cacheDirectory,
148+
cacheIdentifier
149+
})
150+
.end()
105151
.use('babel-loader')
106152
.loader('babel-loader')
107153
.options({
@@ -116,24 +162,6 @@ module.exports = function createBaseConfig ({
116162
})
117163
}
118164

119-
config.module
120-
.rule('markdown')
121-
.test(/\.md$/)
122-
.use('vue-loader')
123-
.loader('vue-loader')
124-
.options({
125-
compilerOptions: {
126-
preserveWhitespace: false
127-
}
128-
})
129-
.end()
130-
.use('markdown-loader')
131-
.loader(require.resolve('./markdownLoader'))
132-
.options({
133-
sourceDir,
134-
markdown
135-
})
136-
137165
config.module
138166
.rule('images')
139167
.test(/\.(png|jpe?g|gif)(\?.*)?$/)

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
"babel-plugin-transform-vue-jsx": "^3.7.0",
4747
"babel-preset-env": "^1.6.1",
4848
"babel-preset-stage-2": "^6.24.1",
49+
"cache-loader": "^1.2.2",
4950
"chalk": "^2.3.2",
5051
"chokidar": "^2.0.3",
5152
"commander": "^2.15.1",
@@ -87,7 +88,7 @@
8788
"toml": "^2.3.3",
8889
"url-loader": "^1.0.1",
8990
"vue": "^2.5.16",
90-
"vue-loader": "^15.0.4",
91+
"vue-loader": "^15.2.0",
9192
"vue-router": "^3.0.1",
9293
"vue-server-renderer": "^2.5.16",
9394
"vue-template-compiler": "^2.5.16",

yarn.lock

+13-4
Original file line numberDiff line numberDiff line change
@@ -1400,6 +1400,15 @@ cache-base@^1.0.1:
14001400
union-value "^1.0.0"
14011401
unset-value "^1.0.0"
14021402

1403+
cache-loader@^1.2.2:
1404+
version "1.2.2"
1405+
resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-1.2.2.tgz#6d5c38ded959a09cc5d58190ab5af6f73bd353f5"
1406+
dependencies:
1407+
loader-utils "^1.1.0"
1408+
mkdirp "^0.5.1"
1409+
neo-async "^2.5.0"
1410+
schema-utils "^0.4.2"
1411+
14031412
call-me-maybe@^1.0.1:
14041413
version "1.0.1"
14051414
resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
@@ -6325,7 +6334,7 @@ sax@^1.2.4, sax@~1.2.1:
63256334
version "1.2.4"
63266335
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
63276336

6328-
schema-utils@^0.4.0, schema-utils@^0.4.3, schema-utils@^0.4.4, schema-utils@^0.4.5:
6337+
schema-utils@^0.4.0, schema-utils@^0.4.2, schema-utils@^0.4.3, schema-utils@^0.4.4, schema-utils@^0.4.5:
63296338
version "0.4.5"
63306339
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e"
63316340
dependencies:
@@ -7254,9 +7263,9 @@ vue-hot-reload-api@^2.3.0:
72547263
version "2.3.0"
72557264
resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.0.tgz#97976142405d13d8efae154749e88c4e358cf926"
72567265

7257-
vue-loader@^15.0.4:
7258-
version "15.0.11"
7259-
resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.0.11.tgz#b41dee864cdeb0012c8a2c02a66b13459e45e16e"
7266+
vue-loader@^15.2.0:
7267+
version "15.2.0"
7268+
resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.2.0.tgz#5a8138e490a1040942d2f10ae68fa72b5a923364"
72607269
dependencies:
72617270
"@vue/component-compiler-utils" "^1.2.1"
72627271
hash-sum "^1.0.2"

0 commit comments

Comments
 (0)