diff --git a/.changeset/gold-radios-argue.md b/.changeset/gold-radios-argue.md new file mode 100644 index 000000000000..cb2bbc46ec2c --- /dev/null +++ b/.changeset/gold-radios-argue.md @@ -0,0 +1,5 @@ +--- +"create-svelte": patch +--- + +feat: make output reflect user's choice of package manager diff --git a/packages/create-svelte/bin.js b/packages/create-svelte/bin.js index 27cb4e89a970..fa5fc87cfb84 100755 --- a/packages/create-svelte/bin.js +++ b/packages/create-svelte/bin.js @@ -4,7 +4,7 @@ import path from 'node:path'; import * as p from '@clack/prompts'; import { bold, cyan, grey, yellow } from 'kleur/colors'; import { create } from './index.js'; -import { dist } from './utils.js'; +import { dist, package_manager } from './utils.js'; const { version } = JSON.parse(fs.readFileSync(new URL('package.json', import.meta.url), 'utf-8')); let cwd = process.argv[2] || '.'; @@ -161,10 +161,10 @@ if (relative !== '') { console.log(` ${i++}: ${bold(cyan(`cd ${relative}`))}`); } -console.log(` ${i++}: ${bold(cyan('npm install'))} (or pnpm install, etc)`); +console.log(` ${i++}: ${bold(cyan(`${package_manager} install`))}`); // prettier-ignore console.log(` ${i++}: ${bold(cyan('git init && git add -A && git commit -m "Initial commit"'))} (optional)`); -console.log(` ${i++}: ${bold(cyan('npm run dev -- --open'))}`); +console.log(` ${i++}: ${bold(cyan(`${package_manager} run dev -- --open`))}`); console.log(`\nTo close the dev server, hit ${bold(cyan('Ctrl-C'))}`); console.log(`\nStuck? Visit us at ${cyan('https://svelte.dev/chat')}`); diff --git a/packages/create-svelte/utils.js b/packages/create-svelte/utils.js index 82a9120017b6..b610ee7bfe84 100644 --- a/packages/create-svelte/utils.js +++ b/packages/create-svelte/utils.js @@ -49,3 +49,17 @@ export function copy(from, to, rename = identity) { export function dist(path) { return fileURLToPath(new URL(`./dist/${path}`, import.meta.url).href); } + +export const package_manager = get_package_manager() || 'npm'; + +// Thanks to https://github.com/zkochan/packages/tree/main/which-pm-runs for this code! +function get_package_manager() { + if (!process.env.npm_config_user_agent) { + return undefined; + } + const user_agent = process.env.npm_config_user_agent; + const pm_spec = user_agent.split(' ')[0]; + const separator_pos = pm_spec.lastIndexOf('/'); + const name = pm_spec.substring(0, separator_pos); + return name === 'npminstall' ? 'cnpm' : name; +}