fix: update cmd should work normal when set empty string version (#4243)

close #4196
This commit is contained in:
zoomdong
2022-01-17 23:09:47 +08:00
committed by GitHub
parent 3e856bf637
commit 8a2cad0342
6 changed files with 75 additions and 1 deletions

View File

@@ -0,0 +1,5 @@
---
"pnpm": patch
---
Update command should work when there is a dependency with emty version in `devDependencies` [#4196](https://github.com/pnpm/pnpm/issues/4196).

View File

@@ -0,0 +1,5 @@
---
"@pnpm/manifest-utils": patch
---
fix: version set be correct when set empty version

View File

@@ -20,6 +20,7 @@
},
"repository": "https://github.com/pnpm/pnpm/blob/master/packages/manifest-utils",
"scripts": {
"start": "tsc --watch",
"_test": "jest",
"test": "pnpm run compile && pnpm run _test",
"lint": "eslint src/**/*.ts test/**/*.ts",

View File

@@ -61,5 +61,5 @@ function findSpec (alias: string, manifest: ProjectManifest): string | undefined
export function guessDependencyType (alias: string, manifest: ProjectManifest): DependenciesField | undefined {
return DEPENDENCIES_FIELDS
.find((depField) => Boolean(manifest[depField]?.[alias]))
.find((depField) => manifest[depField]?.[alias] === '' || Boolean(manifest[depField]?.[alias]))
}

View File

@@ -0,0 +1,25 @@
import { guessDependencyType } from '@pnpm/manifest-utils'
test('guessDependencyType()', () => {
expect(
guessDependencyType('foo', {
dependencies: {
bar: '1.0.0',
},
devDependencies: {
foo: '',
},
})
).toEqual('devDependencies')
expect(
guessDependencyType('bar', {
dependencies: {
bar: '1.0.0',
},
devDependencies: {
foo: '1.0.0',
},
})
).toEqual('dependencies')
})

View File

@@ -153,3 +153,41 @@ test('update --no-save should not update package.json and pnpm-lock.yaml', async
expect(lockfile.packages['/peer-a/1.0.1']).toBeTruthy()
}
})
// fix: https://github.com/pnpm/pnpm/issues/4196
test('update should work normal when set empty string version', async () => {
await addDistTag({ package: 'peer-a', version: '1.0.1', distTag: 'latest' })
await addDistTag({ package: 'peer-c', version: '2.0.0', distTag: 'latest' })
await addDistTag({ package: 'pnpm-foo', version: '2.0.0', distTag: 'latest' })
const project = prepare({
dependencies: {
'peer-a': '1.0.0',
},
devDependencies: {
'pnpm-foo': '',
'peer-c': '',
},
})
await install.handler({
...DEFAULT_OPTS,
dir: process.cwd(),
workspaceDir: process.cwd(),
})
await update.handler({
...DEFAULT_OPTS,
dir: process.cwd(),
latest: true,
workspaceDir: process.cwd(),
}, ['*'])
const lockfile = await project.readLockfile()
expect(lockfile.packages['/peer-a/1.0.1']).toBeTruthy()
expect(lockfile.packages['/peer-c/2.0.0']).toBeTruthy()
expect(lockfile.packages['/pnpm-foo/2.0.0']).toBeTruthy()
expect(lockfile.dependencies['peer-a']).toEqual('1.0.1')
expect(lockfile.devDependencies['pnpm-foo']).toEqual('2.0.0')
expect(lockfile.devDependencies['peer-c']).toEqual('2.0.0')
})