mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-29 17:07:22 +00:00
feat(nuxi): nuxi upgrade command (#1468)
Co-authored-by: Pooya Parsa <pyapar@gmail.com>
This commit is contained in:
parent
83139d07e9
commit
1f0cea6e7f
@ -42,3 +42,11 @@ npm run build
|
|||||||
::
|
::
|
||||||
|
|
||||||
Nuxt will create a [`.output`](/docs/directory-structure/output) directory with all your application, server and dependencies ready to be deployed. Checkout the [deployment](/docs/deployment) section to learn where and how you can deploy a Nuxt application using Nitro.
|
Nuxt will create a [`.output`](/docs/directory-structure/output) directory with all your application, server and dependencies ready to be deployed. Checkout the [deployment](/docs/deployment) section to learn where and how you can deploy a Nuxt application using Nitro.
|
||||||
|
|
||||||
|
## Upgrade Nuxt3 version
|
||||||
|
|
||||||
|
To upgrade Nuxt3 version:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx nuxi upgrade
|
||||||
|
```
|
||||||
|
@ -2,4 +2,4 @@
|
|||||||
|
|
||||||
> Nuxt Command Line Interface
|
> Nuxt Command Line Interface
|
||||||
|
|
||||||
Learn more about this package: https://v3.nuxtjs.org
|
Learn more about this package: https://v3.nuxtjs.org/getting-started/commands
|
||||||
|
@ -11,7 +11,8 @@ export const commands = {
|
|||||||
usage: () => import('./usage').then(_rDefault),
|
usage: () => import('./usage').then(_rDefault),
|
||||||
info: () => import('./info').then(_rDefault),
|
info: () => import('./info').then(_rDefault),
|
||||||
init: () => import('./init').then(_rDefault),
|
init: () => import('./init').then(_rDefault),
|
||||||
create: () => import('./init').then(_rDefault)
|
create: () => import('./init').then(_rDefault),
|
||||||
|
upgrade: () => import('./upgrade').then(_rDefault)
|
||||||
}
|
}
|
||||||
|
|
||||||
export type Command = keyof typeof commands
|
export type Command = keyof typeof commands
|
||||||
|
68
packages/nuxi/src/commands/upgrade.ts
Normal file
68
packages/nuxi/src/commands/upgrade.ts
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
import { execSync } from 'child_process'
|
||||||
|
import { promises as fsp, existsSync } from 'fs'
|
||||||
|
import consola from 'consola'
|
||||||
|
import { resolve } from 'pathe'
|
||||||
|
import { resolveModule } from '../utils/cjs'
|
||||||
|
import { defineNuxtCommand } from './index'
|
||||||
|
|
||||||
|
async function getNuxtVersion (paths: string | string[]) {
|
||||||
|
const pkgJson = resolveModule('nuxt3/package.json', paths)
|
||||||
|
const pkg = pkgJson && JSON.parse(await fsp.readFile(pkgJson, 'utf8'))
|
||||||
|
if (!pkg.version) {
|
||||||
|
consola.warn('Cannot find any installed nuxt3 versions in ', paths)
|
||||||
|
}
|
||||||
|
return pkg.version || '0.0.0'
|
||||||
|
}
|
||||||
|
|
||||||
|
export default defineNuxtCommand({
|
||||||
|
meta: {
|
||||||
|
name: 'upgrade',
|
||||||
|
usage: 'npx nuxi upgrade [--force|-f]',
|
||||||
|
description: 'Upgrade nuxt3'
|
||||||
|
},
|
||||||
|
async invoke (args) {
|
||||||
|
const rootDir = resolve(args._[0] || '.')
|
||||||
|
|
||||||
|
const yarnLock = 'yarn.lock'
|
||||||
|
const npmLock = 'package-lock.json'
|
||||||
|
|
||||||
|
const isYarn = existsSync(resolve(rootDir, yarnLock))
|
||||||
|
const isNpm = existsSync(resolve(rootDir, npmLock))
|
||||||
|
const packageManager = isYarn ? 'yarn' : isNpm ? 'npm' : null
|
||||||
|
if (!packageManager) {
|
||||||
|
console.error('Cannot detect Package Manager in', rootDir)
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
const packageManagerVersion = execSync(`${packageManager} --version`).toString('utf8').trim()
|
||||||
|
consola.info('Package Manager:', packageManager, packageManagerVersion)
|
||||||
|
|
||||||
|
const currentVersion = await getNuxtVersion(rootDir)
|
||||||
|
consola.info('Current nuxt version:', currentVersion)
|
||||||
|
|
||||||
|
if (args.force || args.f) {
|
||||||
|
consola.info('Removing lock-file and node_modules...')
|
||||||
|
await Promise.all([
|
||||||
|
fsp.rm(isYarn ? yarnLock : npmLock),
|
||||||
|
fsp.rmdir('node_modules', { recursive: true })
|
||||||
|
])
|
||||||
|
execSync(`${packageManager} install`, { stdio: 'inherit' })
|
||||||
|
} else {
|
||||||
|
consola.info('Upgrading nuxt...')
|
||||||
|
execSync(`${packageManager} ${isYarn ? 'add' : 'install'} nuxt3@latest`, { stdio: 'inherit' })
|
||||||
|
}
|
||||||
|
|
||||||
|
const upgradedVersion = await getNuxtVersion(rootDir)
|
||||||
|
consola.info('Upgraded nuxt version:', upgradedVersion)
|
||||||
|
|
||||||
|
if (upgradedVersion === currentVersion) {
|
||||||
|
consola.success('You\'re already using the latest version of nuxt3.')
|
||||||
|
} else {
|
||||||
|
consola.success('Successfully upgraded nuxt from', currentVersion, 'to', upgradedVersion)
|
||||||
|
const commitA = currentVersion.split('.').pop()
|
||||||
|
const commitB = upgradedVersion.split('.').pop()
|
||||||
|
if (commitA && commitB) {
|
||||||
|
consola.info('Changelog:', `https://github.com/nuxt/framework/compare/${commitA}...${commitB}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
Loading…
Reference in New Issue
Block a user