diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c0c9b6b56..c0c8e7d1f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ Please add one entry in this file for each change in Yarn's behavior. Use the sa ## Master +- Preserves linked packages when calling `yarn create` + + [#7543](https://github.com/yarnpkg/yarn/pull/7543) - [**Nick McCurdy**](https://github.com/nickmccurdy) + - Fixes the offline mirror filenames when using Verdaccio [#7499](https://github.com/yarnpkg/yarn/pull/7499) - [**xv2**](https://github.com/xv2) diff --git a/src/cli/commands/create.js b/src/cli/commands/create.js index cdbcc0ad8c..49b81ac5f7 100644 --- a/src/cli/commands/create.js +++ b/src/cli/commands/create.js @@ -5,6 +5,7 @@ import {MessageError} from '../../errors.js'; import type {Reporter} from '../../reporters/index.js'; import * as child from '../../util/child.js'; import {makeEnv} from '../../util/execute-lifecycle-script'; +import * as fs from '../../util/fs.js'; import {run as runGlobal, getBinFolder} from './global.js'; const path = require('path'); @@ -58,7 +59,13 @@ export async function run(config: Config, reporter: Reporter, flags: Object, arg } const {fullName: packageName, name: commandName} = coerceCreatePackageName(builderName); - await runGlobal(config, reporter, {}, ['add', packageName]); + + const linkLoc = path.join(config.linkFolder, commandName); + if (await fs.exists(linkLoc)) { + reporter.info(reporter.lang('linkUsing', packageName)); + } else { + await runGlobal(config, reporter, {}, ['add', packageName]); + } const binFolder = await getBinFolder(config, {}); const command = path.resolve(binFolder, commandName); diff --git a/src/resolvers/exotics/link-resolver.js b/src/resolvers/exotics/link-resolver.js index f507700fc7..cc27abc8ea 100644 --- a/src/resolvers/exotics/link-resolver.js +++ b/src/resolvers/exotics/link-resolver.js @@ -30,9 +30,10 @@ export default class LinkResolver extends ExoticResolver { const name = path.basename(loc); const registry: RegistryNames = 'npm'; - const manifest: Manifest = !await fs.exists(`${loc}/package.json`) || loc === this.config.lockfileFolder - ? {_uid: '', name, version: '0.0.0', _registry: registry} - : await this.config.readManifest(loc, this.registry); + const manifest: Manifest = + !await fs.exists(`${loc}/package.json`) || loc === this.config.lockfileFolder + ? {_uid: '', name, version: '0.0.0', _registry: registry} + : await this.config.readManifest(loc, this.registry); manifest._remote = { type: 'link',