diff --git a/package.json b/package.json index a0754cad93..15618ba12f 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "@sindresorhus/slugify": "^1.1.0", "arg": "^5.0.0", "chalk": "^4.1.0", + "command-exists": "^1.2.9", "execa": "^5.0.0", "figures": "^3.2.0", "fs-extra": "^9.0.1", diff --git a/utils/createProject.js b/utils/createProject.js index 4c09667e06..5fc3945e0c 100644 --- a/utils/createProject.js +++ b/utils/createProject.js @@ -8,6 +8,7 @@ const { getArgs } = require('./getArgs'); const { getProjectDir } = require('./getProjectDir'); const { getTemplate } = require('./getTemplate'); const { success, error } = require('./log'); +const { getPackageManager } = require('./getPackageManager'); const createProjectDir = (projectDir) => { fse.mkdirpSync(projectDir); @@ -18,13 +19,12 @@ const createProjectDir = (projectDir) => { } }; -const installDeps = async (dir) => { +const installDeps = async (dir, packageManager) => { const args = getArgs(); if (args['--no-deps']) { return { failed: false }; } - - const cmd = args['--use-npm'] ? 'npm install' : 'yarn'; + let cmd = packageManager === 'yarn' ? 'yarn' : 'npm install'; let result = false; try { @@ -51,8 +51,10 @@ const createProject = async () => { console.error(err); } + const packageManager = await getPackageManager(); + success(`Using ${packageManager} as package manager`); const spinner = ora('Installing dependencies. This may take a few minutes.').start(); - const result = await installDeps(projectDir); + const result = await installDeps(projectDir, packageManager); spinner.stop(); spinner.clear(); if (result.failed) { diff --git a/utils/getPackageManager.js b/utils/getPackageManager.js new file mode 100644 index 0000000000..7a16569334 --- /dev/null +++ b/utils/getPackageManager.js @@ -0,0 +1,25 @@ +const commandExists = require('command-exists'); +const { getArgs } = require('./getArgs'); + +let PACKAGE_MANAGER = false; +const getPackageManager = async () => { + if (PACKAGE_MANAGER) { + return PACKAGE_MANAGER; + } + + const args = getArgs(); + + if (args['--use-npm']) { + PACKAGE_MANAGER = 'npm'; + } else { + try { + await commandExists('yarn'); + PACKAGE_MANAGER = 'yarn'; + } catch (error) { + PACKAGE_MANAGER = 'npm'; + } + } + return PACKAGE_MANAGER; +} + +module.exports = { getPackageManager }; \ No newline at end of file diff --git a/utils/messages.js b/utils/messages.js index bdf8434317..961fedb380 100644 --- a/utils/messages.js +++ b/utils/messages.js @@ -2,6 +2,7 @@ const chalk = require('chalk'); const figures = require('figures'); const terminalLink = require('terminal-link'); const { getProjectDir } = require('./getProjectDir'); +const { getPackageManager } = require('./getPackageManager'); const header = (message) => chalk.yellow(figures.star) + ' ' + chalk.bold(message); @@ -21,6 +22,7 @@ const helpMessage = chalk` {dim Available templates: javascript, typescript} + --use-npm Use npm to install dependencies --help Show help `; @@ -28,7 +30,7 @@ const successMessage = async () => ` ${header('Launch Application:')} - cd ${await getProjectDir()} - - yarn dev + - ${await getPackageManager() === 'yarn' ? 'yarn' : 'npm run'} dev ${header('Documentation:')} diff --git a/yarn.lock b/yarn.lock index b61e8310b1..856425fd3f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -106,6 +106,11 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +command-exists@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"