Skip to content

Commit c0495e7

Browse files
authored
feat: add --next flag to vue upgrade to check for beta versions (#4404)
1 parent 4e43c0e commit c0495e7

File tree

3 files changed

+22
-11
lines changed

3 files changed

+22
-11
lines changed

packages/@vue/cli/bin/vue.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,10 +167,12 @@ program
167167
})
168168

169169
program
170-
.command('upgrade [package-name]')
170+
.command('upgrade [plugin-name]')
171171
.description('(experimental) upgrade vue cli service / plugins')
172172
.option('-t, --to <version>', 'upgrade <package-name> to a version that is not latest')
173173
.option('-r, --registry <url>', 'Use specified npm registry when installing dependencies')
174+
.option('--all', 'Upgrade all plugins')
175+
.option('--next', 'Also check for alpha / beta / rc versions when upgrading')
174176
.action((packageName, cmd) => {
175177
require('../lib/upgrade')(packageName, cleanArgs(cmd))
176178
})

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

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const fs = require('fs')
22
const path = require('path')
33
const chalk = require('chalk')
44
const execa = require('execa')
5+
const semver = require('semver')
56
const {
67
log,
78
done,
@@ -32,11 +33,11 @@ module.exports = class Upgrader {
3233
this.pm = new PackageManager({ context })
3334
}
3435

35-
async upgradeAll () {
36+
async upgradeAll (includeNext) {
3637
// TODO: should confirm for major version upgrades
3738
// for patch & minor versions, upgrade directly
3839
// for major versions, prompt before upgrading
39-
const upgradable = await this.getUpgradable()
40+
const upgradable = await this.getUpgradable(includeNext)
4041

4142
if (!upgradable.length) {
4243
done('Seems all plugins are up to date. Good work!')
@@ -75,6 +76,10 @@ module.exports = class Upgrader {
7576
}
7677

7778
targetVersion = await this.pm.getRemoteVersion(packageName, targetVersion)
79+
if (!options.to && options.next) {
80+
const next = await this.pm.getRemoteVersion(packageName, 'next')
81+
targetVersion = semver.gte(targetVersion, next) ? targetVersion : next
82+
}
7883
stopSpinner()
7984
}
8085

@@ -177,7 +182,7 @@ module.exports = class Upgrader {
177182
migrator.printExitLogs()
178183
}
179184

180-
async getUpgradable () {
185+
async getUpgradable (includeNext) {
181186
const upgradable = []
182187

183188
// get current deps
@@ -191,9 +196,13 @@ module.exports = class Upgrader {
191196
const installed = await this.pm.getInstalledVersion(name)
192197
const wanted = await this.pm.getRemoteVersion(name, range)
193198

194-
const latest = await this.pm.getRemoteVersion(name)
199+
let latest = await this.pm.getRemoteVersion(name)
200+
if (includeNext) {
201+
const next = await this.pm.getRemoteVersion(name, 'next')
202+
latest = semver.gte(latest, next) ? latest : next
203+
}
195204

196-
if (installed !== latest) {
205+
if (semver.lt(installed, latest)) {
197206
// always list @vue/cli-service as the first one
198207
// as it's depended by all other plugins
199208
if (name === '@vue/cli-service') {
@@ -208,9 +217,9 @@ module.exports = class Upgrader {
208217
return upgradable
209218
}
210219

211-
async checkForUpdates () {
220+
async checkForUpdates (includeNext) {
212221
logWithSpinner('Gathering package information...')
213-
const upgradable = await this.getUpgradable()
222+
const upgradable = await this.getUpgradable(includeNext)
214223
stopSpinner()
215224

216225
if (!upgradable.length) {
@@ -225,7 +234,7 @@ module.exports = class Upgrader {
225234
if (!Number.isFinite(namePad)) {
226235
namePad = 30
227236
}
228-
const pads = [namePad, 12, 12, 12, 0]
237+
const pads = [namePad, 16, 16, 16, 0]
229238
console.log(
230239
' ' +
231240
['Name', 'Installed', 'Wanted', 'Latest', 'Command to upgrade'].map(

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ async function upgrade (packageName, options, context = process.cwd()) {
1717
}
1818

1919
if (options.all) {
20-
return upgrader.upgradeAll()
20+
return upgrader.upgradeAll(options.next)
2121
}
2222

23-
return upgrader.checkForUpdates()
23+
return upgrader.checkForUpdates(options.next)
2424
}
2525

2626
return upgrader.upgrade(packageName, options)

0 commit comments

Comments
 (0)