fix(builder): use warn only for mismatched deps (#5723)

This commit is contained in:
Pooya Parsa 2019-05-14 18:05:31 +04:30 committed by GitHub
parent 121d481317
commit 62a593dcfd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 3 additions and 31 deletions

View File

@ -193,38 +193,20 @@ export default class Builder {
validateTemplate() {
// Validate template dependencies
const templateDependencies = this.template.dependencies
const dependencyFixes = []
for (const depName in templateDependencies) {
const depVersion = templateDependencies[depName]
const requiredVersion = `${depName}@${depVersion}`
// Load installed version
const pkg = this.nuxt.resolver.requireModule(path.join(depName, 'package.json'))
if (pkg) {
const validVersion = semver.satisfies(pkg.version, depVersion)
if (!validVersion) {
consola.warn(`${requiredVersion} is required but ${depName}@${pkg.version} is installed!`)
dependencyFixes.push(requiredVersion)
consola.warn(`${depName}@${depVersion} is recommended but ${depName}@${pkg.version} is installed!`)
}
} else {
consola.warn(`${depName}@${depVersion} is required but not installed!`)
dependencyFixes.push(requiredVersion)
}
}
// Suggest dependency fixes (TODO: automate me)
if (dependencyFixes.length) {
consola.error(
'Please install missing dependencies:\n',
'\n',
'Using yarn:\n',
`yarn add ${dependencyFixes.join(' ')}\n`,
'\n',
'Using npm:\n',
`npm i ${dependencyFixes.join(' ')}\n`
)
throw new Error('Missing App Dependencies')
}
}
async generateRoutesAndFiles() {

View File

@ -263,24 +263,14 @@ describe('builder: builder build', () => {
.mockReturnValueOnce({ version: 'alpha' })
.mockReturnValueOnce(undefined)
expect(() => builder.validateTemplate()).toThrow('Missing App Dependencies')
builder.validateTemplate()
expect(nuxt.resolver.requireModule).toBeCalledTimes(2)
expect(nuxt.resolver.requireModule).nthCalledWith(1, 'join(vue, package.json)')
expect(nuxt.resolver.requireModule).nthCalledWith(2, 'join(nuxt, package.json)')
expect(consola.warn).toBeCalledTimes(2)
expect(consola.warn).nthCalledWith(1, 'vue@latest is required but vue@alpha is installed!')
expect(consola.warn).nthCalledWith(1, 'vue@latest is recommended but vue@alpha is installed!')
expect(consola.warn).nthCalledWith(2, 'nuxt@edge is required but not installed!')
expect(consola.error).toBeCalledTimes(1)
expect(consola.error).toBeCalledWith(
'Please install missing dependencies:\n',
'\n',
'Using yarn:\n',
'yarn add vue@latest nuxt@edge\n',
'\n',
'Using npm:\n',
'npm i vue@latest nuxt@edge\n'
)
expect(semver.satisfies).toBeCalledTimes(1)
expect(semver.satisfies).nthCalledWith(1, 'alpha', 'latest')
})