Skip to content

Commit f7d99b8

Browse files
committed
feat: service plugin order
1 parent b2295fc commit f7d99b8

File tree

3 files changed

+45
-7
lines changed

3 files changed

+45
-7
lines changed

Diff for: packages/@vue/cli-service/lib/Service.js

+15-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const PluginAPI = require('./PluginAPI')
66
const dotenv = require('dotenv')
77
const dotenvExpand = require('dotenv-expand')
88
const defaultsDeep = require('lodash.defaultsdeep')
9-
const { warn, error, isPlugin, resolvePluginId, loadModule, resolvePkg, resolveModule } = require('@vue/cli-shared-utils')
9+
const { warn, error, isPlugin, resolvePluginId, loadModule, resolvePkg, resolveModule, sortPluginsByStage, arrangePlugins } = require('@vue/cli-shared-utils')
1010

1111
const { defaults } = require('./options')
1212
const checkWebpack = require('./util/checkWebpack')
@@ -172,7 +172,14 @@ module.exports = class Service {
172172
'./config/css',
173173
'./config/prod',
174174
'./config/app'
175-
].map((id) => idToPlugin(id))
175+
].map((id) => {
176+
const plugin = idToPlugin(id)
177+
if (typeof plugin.apply.stage !== 'number') {
178+
// plugin 'stage' is 100 by default, built-in plugins have a higher priority
179+
plugin.apply.stage = 0
180+
}
181+
return plugin
182+
})
176183

177184
if (inlinePlugins) {
178185
plugins = useBuiltIn !== false
@@ -224,8 +231,13 @@ module.exports = class Service {
224231
apply: loadModule(`./${file}`, this.pkgContext)
225232
})))
226233
}
234+
const stagePlugins = sortPluginsByStage(plugins)
235+
debug('vue:stage-plugins')(stagePlugins)
236+
237+
const orderedPlugins = arrangePlugins(stagePlugins)
238+
debug('vue:ordered-plugins')(orderedPlugins)
227239

228-
return plugins
240+
return orderedPlugins
229241
}
230242

231243
async run (name, args = {}, rawArgv = []) {

Diff for: packages/@vue/cli-shared-utils/lib/pluginOrder.js

+23-3
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ function getOrderParams (plugin) {
4343
* @param {Array<Plugin>} plugins
4444
* @param {Plugin} item
4545
*/
46-
exports.insertPluginByStage = (plugins, item) => {
46+
function insertPluginByStage (plugins, item) {
4747
const { stage } = getOrderParams(item)
4848

4949
let i = plugins.length
@@ -61,6 +61,20 @@ exports.insertPluginByStage = (plugins, item) => {
6161
plugins[i] = item
6262
}
6363

64+
/**
65+
*
66+
* @param {Array<Plugin>} plugins
67+
* @returns {Array<Plugin>}
68+
*/
69+
function sortPluginsByStage (plugins) {
70+
const sorted = []
71+
plugins.forEach(p => {
72+
insertPluginByStage(sorted, p)
73+
})
74+
75+
return sorted
76+
}
77+
6478
/**
6579
* See leetcode 210
6680
* @param {Array<Plugin>} plugins
@@ -120,15 +134,14 @@ function topologicalSorting (plugins) {
120134
// return valid ? res : []
121135
return valid ? res : plugins
122136
}
123-
exports.topologicalSorting = topologicalSorting
124137

125138
/**
126139
* Plugins should be sorted by 'stage' property firstly.
127140
* Arrange plugins by 'after' property.
128141
* @param {Array<Plugin>} plugins
129142
* @returns {Array<Plugin>}
130143
*/
131-
exports.arrangePlugins = (plugins) => {
144+
function arrangePlugins (plugins) {
132145
if (plugins.length < 2) return plugins
133146

134147
/** @type {Array<Plugin>} */
@@ -151,3 +164,10 @@ exports.arrangePlugins = (plugins) => {
151164
})
152165
return res
153166
}
167+
168+
module.exports = {
169+
insertPluginByStage,
170+
sortPluginsByStage,
171+
topologicalSorting,
172+
arrangePlugins
173+
}

Diff for: packages/@vue/cli/lib/Creator.js

+7-1
Original file line numberDiff line numberDiff line change
@@ -389,8 +389,14 @@ module.exports = class Creator extends EventEmitter {
389389

390390
insertPluginByStage(plugins, { id, apply, options })
391391
}
392+
393+
debug('vue-cli:stage-plugins')(plugins)
394+
392395
// arrange plugins by 'after' property
393-
return arrangePlugins(plugins)
396+
const orderedPlugins = arrangePlugins(plugins)
397+
debug('vue-cli:ordered-plugins')(orderedPlugins)
398+
399+
return orderedPlugins
394400
}
395401

396402
getPresets () {

0 commit comments

Comments
 (0)