fix: symlink local dep even when target dir does not exist (#5253)

close #5219
This commit is contained in:
Zoltan Kochan
2022-08-24 04:09:55 +03:00
committed by GitHub
parent 2aa22e4b17
commit e3b5137d1d
7 changed files with 43 additions and 4 deletions

View File

@@ -0,0 +1,6 @@
---
"@pnpm/symlink-dependency": patch
"pnpm": patch
---
Symlink a local dependency to `node_modules`, even if the target directory doesn't exist [#5219](https://github.com/pnpm/pnpm/issues/5219).

View File

@@ -0,0 +1 @@
module.exports = require('../../jest.config.js')

View File

@@ -16,6 +16,7 @@
},
"devDependencies": {
"@pnpm/logger": "^4.0.0",
"@pnpm/prepare": "workspace:*",
"@pnpm/symlink-dependency": "workspace:*"
},
"directories": {
@@ -33,10 +34,11 @@
"repository": "https://github.com/pnpm/pnpm/blob/main/packages/symlink-dependency",
"scripts": {
"start": "tsc --watch",
"test": "pnpm run compile",
"lint": "eslint src/**/*.ts",
"test": "pnpm run compile && pnpm run _test",
"lint": "eslint src/**/*.ts test/**/*.ts",
"prepublishOnly": "pnpm run compile",
"compile": "tsc --build && pnpm run lint --fix"
"compile": "tsc --build && pnpm run lint --fix",
"_test": "jest"
},
"dependencies": {
"@pnpm/core-loggers": "workspace:*",

View File

@@ -50,7 +50,10 @@ export default async function symlinkDirectRootDependency (
} catch (err: any) { // eslint-disable-line
if (err.code !== 'ENOENT') throw err
globalWarn(`Local dependency not found at ${dependencyLocation}`)
return
// Sometimes the linked in local package does not exist during installation
// and is created later via a build script.
// That is why we create the symlink even if the target directory does not exist.
dependencyRealLocation = dependencyLocation
}
const dest = path.join(destModulesDirReal, importAs)

View File

@@ -0,0 +1,21 @@
import fs from 'fs'
import path from 'path'
import { tempDir } from '@pnpm/prepare'
import { symlinkDirectRootDependency } from '@pnpm/symlink-dependency'
test('symlink is created to directory that does not yet exist', async () => {
const tmp = tempDir(false)
const destModulesDir = path.join(tmp, 'node_modules')
const dependencyLocation = path.join(tmp, 'dep')
fs.mkdirSync(destModulesDir)
await symlinkDirectRootDependency(dependencyLocation, destModulesDir, 'dep', {
linkedPackage: {
name: 'dep',
version: '1.0.0',
},
prefix: '',
})
fs.mkdirSync(dependencyLocation)
fs.writeFileSync(path.join(dependencyLocation, 'index.js'), 'module.exports = {}')
expect(fs.existsSync(path.join(destModulesDir, 'dep/index.js'))).toBe(true)
})

View File

@@ -9,6 +9,9 @@
"../../typings/**/*.d.ts"
],
"references": [
{
"path": "../../privatePackages/prepare"
},
{
"path": "../core-loggers"
},

3
pnpm-lock.yaml generated
View File

@@ -5031,6 +5031,9 @@ importers:
'@pnpm/logger':
specifier: ^4.0.0
version: 4.0.0
'@pnpm/prepare':
specifier: workspace:*
version: link:../../privatePackages/prepare
'@pnpm/symlink-dependency':
specifier: workspace:*
version: 'link:'