clouds-cli
Version:
Fast front-end scaffolding tools
104 lines (93 loc) • 2.92 kB
JavaScript
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,
};