UNPKG

clouds-cli

Version:

Fast front-end scaffolding tools

104 lines (93 loc) 2.92 kB
const { promisify } = require("util"); const path = require("path"); const download = promisify(require("download-git-repo")); const { VUE_REPO } = require("../config/repo"); const commandSpawn = require("../utils/terminal"); const log = require("../utils/log"); const open = require("open"); const { ejsCompile, writeFile, mkdirSync } = require("../utils/compileEjs"); const createProjectAction = async (project) => { // 提示信息 log.hint("clo helps you create your project, please wait a moment~"); await download(VUE_REPO, project, { clone: true }); // 手动启动项目 // console.log(` cd ${project}`); // console.log(" npm run install"); // console.log(" npm run dev"); // 自动启动项目 const npm = process.platform === "win32" ? "npm.cmd" : "npm"; await commandSpawn(npm, ["install"], { cwd: `./${project}` }); commandSpawn(npm, ["run", "dev"], { cwd: `./${project}` }); open("http://localhost:5173/"); // 添加组件 }; const handleEjsToFile = async (name, dest, template, filename) => { // 1.获取模块引擎的路径 const templatePath = path.resolve(__dirname, template); const cpnPath = dest.replace("router", "views").replace("src", "@") + `/${name}.vue`; const routePath = dest.replace("/router", "").replace("src", ""); const result = await ejsCompile(templatePath, { name, lowerName: name.toLowerCase(), cpnPath, routePath, }); // 2.写入文件中 // 判断文件不存在,那么就创建文件 mkdirSync(dest); const targetPath = path.resolve(dest, filename); writeFile(targetPath, result); }; const addComponent = async (name, dest) => { handleEjsToFile(name, dest, "../template/component.vue.ejs", `${name}.vue`); }; const addPage = async (name, dest) => { addComponent(name, dest); handleEjsToFile(name, dest, "../template/vue-router.js.ejs", "router.js"); }; const addVue3TSComponent = async (name, dest) => { handleEjsToFile( name, dest, "../template/component3_ts.vue.ejs", `${name}.vue` ); }; const addVue3Page = async (name, dest) => { addVue3TSComponent(name, dest); let routerDest = dest.replace("views", "router"); handleEjsToFile( name, routerDest, "../template/vue-router4.js.ejs", `${name}.ts` ); }; const addVue3PageSetup = async (name, dest) => { handleEjsToFile( name, dest, "../template/components3_ts_su.vue.ejs", `${name}.vue` ); let routerDest = dest.replace("views", "router"); handleEjsToFile( name, routerDest, "../template/vue-router4.js.ejs", `${name.toLowerCase()}.ts` ); }; const addStore = async (name, dest) => { handleEjsToFile(name, dest, "../template/vue-store.js.ejs", "index.js"); handleEjsToFile(name, dest, "../template/vue-types.js.ejs", "types.js"); }; module.exports = { createProjectAction, addComponent, addPage, addVue3Page, addVue3PageSetup, addStore, };