Skip to content

Commit

Permalink
fix(builder): use warn only for mismatched deps (#5723)
Browse files Browse the repository at this point in the history
  • Loading branch information
Pooya Parsa authored May 14, 2019
1 parent 121d481 commit 62a593d
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 31 deletions.
20 changes: 1 addition & 19 deletions packages/builder/src/builder.js
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
14 changes: 2 additions & 12 deletions packages/builder/test/builder.build.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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')
})
Expand Down

0 comments on commit 62a593d

Please sign in to comment.