Skip to content

Commit 84e3549

Browse files
committed
feat: service plugin order
1 parent e04831f commit 84e3549

File tree

3 files changed

+45
-7
lines changed

3 files changed

+45
-7
lines changed

packages/@vue/cli-service/lib/Service.js

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const PluginAPI = require('./PluginAPI')
77
const dotenv = require('dotenv')
88
const dotenvExpand = require('dotenv-expand')
99
const defaultsDeep = require('lodash.defaultsdeep')
10-
const { chalk, warn, error, isPlugin, resolvePluginId, loadModule, resolvePkg, resolveModule } = require('@vue/cli-shared-utils')
10+
const { chalk, warn, error, isPlugin, resolvePluginId, loadModule, resolvePkg, resolveModule, sortPluginsByStage, arrangePlugins } = require('@vue/cli-shared-utils')
1111

1212
const { defaults, validate } = require('./options')
1313
const checkWebpack = require('@vue/cli-service/lib/util/checkWebpack')
@@ -161,7 +161,14 @@ module.exports = class Service {
161161
'./config/css',
162162
'./config/prod',
163163
'./config/app'
164-
].map((id) => idToPlugin(id))
164+
].map((id) => {
165+
const plugin = idToPlugin(id)
166+
if (typeof plugin.apply.stage !== 'number') {
167+
// plugin 'stage' is 100 by default, built-in plugins have a higher priority
168+
plugin.apply.stage = 0
169+
}
170+
return plugin
171+
})
165172

166173
if (inlinePlugins) {
167174
plugins = useBuiltIn !== false
@@ -213,8 +220,13 @@ module.exports = class Service {
213220
apply: loadModule(`./${file}`, this.pkgContext)
214221
})))
215222
}
223+
const stagePlugins = sortPluginsByStage(plugins)
224+
debug('vue:stage-plugins')(stagePlugins)
225+
226+
const orderedPlugins = arrangePlugins(stagePlugins)
227+
debug('vue:ordered-plugins')(orderedPlugins)
216228

217-
return plugins
229+
return orderedPlugins
218230
}
219231

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

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

Lines changed: 23 additions & 3 deletions
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+
}

packages/@vue/cli/lib/Creator.js

Lines changed: 7 additions & 1 deletion
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)