123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- // generateComponent.js 文件,放置生成组件的代码
- const chalk = require("chalk");
- const path = require("path");
- const fs = require("fs");
- const resolve = (...file) => path.resolve(__dirname, ...file);
- // const log = message => console.log(chalk.green(`${message}`));
- // const successLog = message => console.log(chalk.blue(`${message}`));
- const log = message => console.log(chalk.yellow(`${message}`));
- const successLog = message => console.log(chalk.green(`${message}`));
- const errorLog = error => console.log(chalk.red(`${error}`));
- const { vueTemplate, entryTemplate } = require("./template");
- const generateFile = (path, data) => {
- if (fs.existsSync(path)) {
- errorLog(`${path}文件已存在`);
- return;
- }
- return new Promise((resolve, reject) => {
- fs.writeFile(path, data, "utf8", err => {
- if (err) {
- errorLog(err.message);
- reject(err);
- } else {
- resolve(true);
- }
- });
- });
- };
- log("请输入要生成的组件名称、如需生成全局组件,请加 global/ 前缀");
- let componentName = "";
- process.stdin.on("data", async chunk => {
- const inputName = String(chunk)
- .trim()
- .toString();
- // 组件目录路径
- const componentDirectory = resolve("../src/components", inputName);
- // vue组件路径
- const componentVueName = resolve(componentDirectory, "main.vue");
- // 入口文件路径
- const entryComponentName = resolve(componentDirectory, "index.js");
- const hasComponentDirectory = fs.existsSync(componentDirectory);
- if (hasComponentDirectory) {
- errorLog(`${inputName}组件目录已存在,请重新输入`);
- return;
- } else {
- log(`正在生成 component 目录 ${componentDirectory}`);
- await dotExistDirectoryCreate(componentDirectory);
- // fs.mkdirSync(componentDirectory);
- }
- try {
- if (inputName.includes("/")) {
- const inputArr = inputName.split("/");
- componentName = inputArr[inputArr.length - 1];
- } else {
- componentName = inputName;
- }
- log(`正在生成 vue 文件 ${componentVueName}`);
- await generateFile(componentVueName, vueTemplate(componentName));
- log(`正在生成 entry 文件 ${entryComponentName}`);
- await generateFile(entryComponentName, entryTemplate);
- successLog("生成成功");
- } catch (e) {
- errorLog(e.message);
- }
- process.stdin.emit("end");
- });
- process.stdin.on("end", () => {
- log("exit");
- process.exit();
- });
- function dotExistDirectoryCreate(directory) {
- return new Promise(resolve => {
- mkdirs(directory, function() {
- resolve(true);
- });
- });
- }
- // 递归创建目录
- function mkdirs(directory, callback) {
- var exists = fs.existsSync(directory);
- if (exists) {
- callback();
- } else {
- mkdirs(path.dirname(directory), function() {
- fs.mkdirSync(directory);
- callback();
- });
- }
- }
|