@wenxin_dy/wx-vue-cli
Version:
91 lines (76 loc) • 2.77 kB
JavaScript
const { promisify } = require('util');
const path = require('path');
const download = promisify(require('download-git-repo'));
const open = require('open');
const { vueRepo } = require('../config/repo-config');
const { commandSpawn } = require('../utils/terminail');
const { compile, writerFileSync, createDirSync } = require('../utils');
const createActions = async (project) => {
console.log('wnpm helps you create you project');
try {
// clone项目
await download(vueRepo, project, { clone: true })
// 执行npm install
const command = process.platform === 'win32' ? 'npm.cmd' : 'npm';
await commandSpawn(command, ['install'], { cwd: `./${project}` });
// 执行npm run serve
commandSpawn(command, ['run', 'serve'], { cwd: `./${project}` });
// 打开浏览器
open('http//localhost:8080/');
} catch (error) {
console.log(error, 'error');
}
}
const createComponentActions = async (name, dest) => {
try {
// 编译模版
const result = await compile('vue-component.ejs', {name, lowerName: name.toLowerCase() });
// 写入文件
const targetPath = path.resolve(dest, `${name}.vue`);
writerFileSync(targetPath, result);
} catch (error) {
console.log(error, 'error');
}
}
const createPagesActions = async (name, dest) => {
try {
// 编译模版
const comonentResult = await compile('vue-component.ejs', {name, lowerName: name.toLowerCase() });
const routerResult = await compile('vue-router.ejs', {name, lowerName: name.toLowerCase() });
const destPath = path.resolve(dest, name.toLowerCase());
if (createDirSync(destPath)) {
// 写入文件
const comonentPath = path.resolve(destPath, `${name}.vue`);
writerFileSync(comonentPath, comonentResult);
// 写入文件
const routerPath = path.resolve(destPath, 'router.js');
writerFileSync(routerPath, routerResult);
}
} catch (error) {
console.log(error, 'error');
}
}
const createStoresActions = async (name, dest) => {
try {
// 编译模版
const storeResult = await compile('vue-store.ejs', {name, lowerName: name.toLowerCase() });
const typesResult = await compile('vue-types.ejs', {name, lowerName: name.toLowerCase() });
const destPath = path.resolve(dest, name.toLowerCase());
if (createDirSync(destPath)) {
// 写入文件
const storePath = path.resolve(destPath, `${name}.vue`);
writerFileSync(storePath, storeResult);
// 写入文件
const typesPath = path.resolve(destPath, 'types.js');
writerFileSync(typesPath, typesResult);
}
} catch (error) {
console.log(error, 'error');
}
}
module.exports = {
createActions,
createComponentActions,
createPagesActions,
createStoresActions,
}