0-1项目脚手架命令行生成项目目录

这应该是在公司的基建团队都会做的事情吧。

类似于create-react-app这样的react项目快速搭建工具,它们都有自己的生成目录的命令。

npx create-react-app my-app

这次要分享的是我之前已经做好的最简单的命令行脚手架demo,用到了terminal-kit,inquirer,ejs这几个插件。

1.terminal-kit输出美化插件
2.inquirer命令行交互插件
3.ejs通过.ejs高效输出文件

我们按照命令一步一步来
第一步:初始化目录

npm init

第二步:安装相关插件

npm install ejs inquirer terminal-kit

第三步:完善package.json配置
这里的bin是用来配置命令行命令的这里的可以在根目录执行npm link就可以在全局命令行使用“cli”命令。

{
  "name": "hong-cli",
  "version": "1.1.4",
  "description": "试验脚手架",
  "main": "index.js",
  "scripts": {
    "cli": "node cli.js"
  },
  "author": "",
  "license": "ISC",
  "bin": {
    "cli": "node cli.js"
  },
  "keywords": [
    "cli"
  ],
  "dependencies": {
    "commander": "^8.3.0",
    "ejs": "^3.1.6",
    "inquirer": "^8.2.0",
    "terminal-kit": "^2.3.0"
  }
}

第四步:新建模板目录和相关的ejs以及html文件
index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title><%= title %></title>
</head>
<body>
    
</body>
</html>

react.ejs

import React, {useState} from 'react'

export default () => {
    return <div><%= title %></div>
}

vue.ejs(时间是有点早了所以模板是vue2)

<template>
  <div><%= title %></div>
</template>

<script>
export default {
    data() {
        return {
            data: "<%= title %>"
        }
    }   
}
</script>

<style>

</style>

第五步:核心cli.js
解释一下下面的代码吧
1.#!/usr/bin/env node这个是表示该文件是node脚本并指定node环境的目录
2.命令行中拿到的输入值通过ejs将ejs模板中的插入的<%= title %>字段替换成对应的输入值,最终输出到当前执行命令的目录中也就是process.cwd()

#!/usr/bin/env node
// 指定运行环境

const ejs = require("ejs");
const inquirer = require("inquirer");
const fs = require("fs");

const process = require("process");

const path = require("path");

const terminal = require('terminal-kit')

console.log(process.cwd());

inquirer
  .prompt([
    {
      type: "input",
      message: "输入你的名字",
      name: "value", // 本次交互数据的键名称
    },
  ])
  .then((res) => {
    const resHtml = ejs.render(
      fs.readFileSync(
        path.resolve(__dirname, "./templete/index.html"),
        "utf-8"
      ),
      {
        title: res.value,
      }
    );
    resHtml &&
      fs.writeFileSync(process.cwd() + "/index.html", resHtml, "utf-8");
    const resHtml1 = ejs.render(
      fs.readFileSync(path.resolve(__dirname, "./templete/vue.ejs"), "utf-8"),
      {
        title: res.value,
      }
    );
    resHtml1 && fs.writeFileSync(process.cwd() + "/vue.vue", resHtml1, "utf-8");
    const resHtml2 = ejs.render(
      fs.readFileSync(path.resolve(__dirname, "./templete/react.ejs"), "utf-8"),
      {
        title: res.value,
      }
    );
    resHtml2 &&
      fs.writeFileSync(process.cwd() + "/react.tsx", resHtml2, "utf-8");
    terminal.terminal.green("生成目录生成完成!")
  });
体验
npm run cli

输入姓名后回车就会在当前目录中生成相关的项目文件。

最后

        通过npm publish命令可以将脚手架发布到npm上后续npm install XXX -g就能在全局使用配置package.json中配置好的bin脚本命令。

总结

        这样的脚手架在大的公司团队中有很大好处,可以定制公司自己的项目架构,快速搭建项目,约束规范公司开发规范。

胜利和败北都要品尝、经历过四处逃窜的辛酸、痛苦和悲伤的回忆、这样才能独当一面、就算痛哭流涕也没关系!一定要闯过这一关。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值