From 4959cdccf6c31004b653dfabc9f808ca05f3a85d Mon Sep 17 00:00:00 2001 From: Michael Joseph Date: Thu, 8 Jul 2021 22:27:01 +0200 Subject: [PATCH] Portable filesystem paths with stdlib path module https://gist.github.com/domenic/2790533 https://nodejs.org/docs/latest/api/path.html#path_path --- cli.js | 40 ++++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/cli.js b/cli.js index f5644acb..552d85df 100644 --- a/cli.js +++ b/cli.js @@ -2,47 +2,45 @@ const chalk = require('chalk'); const editJsonFile = require('edit-json-file'); -const util = require('util'); const fs = require('fs'); +const path = require('path'); +const util = require('util'); const asyncMkdir = util.promisify(fs.mkdir); - -const CURR_DIR = process.cwd(); -const isWindows = process.platform === 'win32'; +const CWD = process.cwd(); const createDirectoryContents = async (starterKitPath, newProjectPath) => { const filesToCreate = fs.readdirSync(starterKitPath); filesToCreate.forEach(file => { - const origFilePath = `${starterKitPath}/${file}`; + const origFilePath = path.resolve(starterKitPath, file); + const writePath = path.resolve(newProjectPath, file); const stats = fs.statSync(origFilePath); if (stats.isFile()) { const contents = fs.readFileSync(origFilePath, 'utf8'); - - const writePath = `${CURR_DIR}/${newProjectPath}/${file}`; - fs.writeFileSync(writePath, contents, 'utf8'); + fs.writeFileSync( + path.resolve(CWD, writePath), + contents, + 'utf8' + ); } else if (stats.isDirectory()) { - fs.mkdirSync(`${CURR_DIR}/${newProjectPath}/${file}`); + fs.mkdirSync(path.resolve(CWD, writePath); - createDirectoryContents( - `${starterKitPath}/${file}`, - `${newProjectPath}/${file}` - ); + createDirectoryContents(origFilePath, writePath); } }); }; const editFiles = async projectName => { - let file = editJsonFile(`${__dirname}/starter-kit/package.json`); - + let file = editJsonFile(path.resolve(__dirname, 'starter-kit', 'package.json'); file.set('name', projectName); file.save(); fs.rename( - `${__dirname}/starter-kit/gitignore`, - `${__dirname}/starter-kit/.gitignore`, + path.resolve(__dirname, 'starter-kit', 'gitignore'), + path.resolve(__dirname, 'starter-kit', '.gitignore'), function (err) { if (err) throw err; } @@ -56,9 +54,7 @@ const checkDirectory = async () => { throw 'You should input 1 argument as the project name'; } else { const projectName = process.argv[2]; - const directory = isWindows - ? `${CURR_DIR}\\${projectName}` - : `${CURR_DIR}/${projectName}`; + const directory = path.resolve(CWD, projectName); console.log(`\n\nCreating a new starter kit in ${chalk.cyan(directory)}\n`); return projectName; @@ -91,11 +87,11 @@ const successText = projectName => { const run = async () => { const projectName = await checkDirectory(); - const starterKitPath = `${__dirname}/starter-kit/`; + const starterKitPath = path.resolve(__dirname, 'starter-kit'); await editFiles(projectName); - await asyncMkdir(`${CURR_DIR}/${projectName}`); + await asyncMkdir(path.resolve(CWD, projectName)); await createDirectoryContents(starterKitPath, projectName);