UNPKG

lcap

Version:

CLI for Lcap Projects, including Application and UI Library.

94 lines (79 loc) 2.58 kB
const fs = require('fs-extra'); const path = require('path'); const inquirer = require('inquirer'); const ora = require('ora'); const { promptInstallUI, installLcapUI } = require('./install'); const { LCAP_UI } = require('./constants'); const logger = require('./logger'); function copyFolder(sourceFolder, destinationFolder, info) { if (!fs.existsSync(sourceFolder)) { return; } if (!fs.existsSync(destinationFolder)) { fs.mkdirSync(destinationFolder, { recursive: true }); } fs.readdirSync(sourceFolder).forEach((file) => { const sourceFilePath = `${sourceFolder}/${file}`; if (file.startsWith('_')) { file = '.' + file.substring(1); } const destinationFilePath = `${destinationFolder}/${file}`; if (fs.lstatSync(sourceFilePath).isDirectory()) { copyFolder(sourceFilePath, destinationFilePath, info); } else { const buffer = fs.readFileSync(sourceFilePath, 'utf8'); fs.writeFileSync(destinationFilePath, buffer.toString().replace(/\{\{LIBRARY_NAME\}\}/g, info.name)); } }); } async function getLcapInfo(framework) { const { useLcap } = await inquirer.prompt([{ type: 'confirm', name: 'useLcap', message: '是否添加 CodeWave 基础组件包?', default: false, }]) if (!useLcap) { return; } const uiInfo = await promptInstallUI(framework); return { [LCAP_UI]: { ...uiInfo, framework, }, } } module.exports = async ({ templatePath, basePath, info }) => { const lcapInfo = await getLcapInfo(info.framework); const spinner = ora(`开始创建项目...`).start(); try { copyFolder(templatePath, basePath, info); const pkg = fs.readJSONSync(path.resolve(basePath, 'package.json'), 'utf-8'); pkg.name = info.name; pkg.title = info.title; pkg.description = info.title; pkg.version = '1.0.0'; if (lcapInfo) { pkg.lcap = { ...(pkg.lcap || {}), ...lcapInfo, }; if (!pkg.scripts['lcap:install']) { pkg.scripts['lcap:install'] = "lcap install --once"; pkg.scripts['prestart'] = 'npm run lcap:install'; pkg.scripts['prebuild'] = 'npm run lcap:install'; } } await fs.outputFile(path.resolve(basePath, 'package.json'), JSON.stringify(pkg, null, 2)); if (lcapInfo && lcapInfo[LCAP_UI]) { await installLcapUI(lcapInfo[LCAP_UI], basePath); } spinner.succeed(); } catch(e) { spinner.stop(); logger.error(`创建项目失败,${e.message}`); logger.error(e); process.exit(1); } };