mirror of
https://github.com/pnpm/pnpm.git
synced 2026-07-26 07:27:20 -04:00
fix: symlink local dep even when target dir does not exist (#5253)
close #5219
This commit is contained in:
6
.changeset/orange-swans-relax.md
Normal file
6
.changeset/orange-swans-relax.md
Normal 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).
|
||||
1
packages/symlink-dependency/jest.config.js
Normal file
1
packages/symlink-dependency/jest.config.js
Normal file
@@ -0,0 +1 @@
|
||||
module.exports = require('../../jest.config.js')
|
||||
@@ -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:*",
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
})
|
||||
@@ -9,6 +9,9 @@
|
||||
"../../typings/**/*.d.ts"
|
||||
],
|
||||
"references": [
|
||||
{
|
||||
"path": "../../privatePackages/prepare"
|
||||
},
|
||||
{
|
||||
"path": "../core-loggers"
|
||||
},
|
||||
|
||||
3
pnpm-lock.yaml
generated
3
pnpm-lock.yaml
generated
@@ -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:'
|
||||
|
||||
Reference in New Issue
Block a user