Nodejs ejs 实现cli

简介: Nodejs ejs 实现cli
const inquirer = require('inquirer')
const fs = require('fs')
const path = require('path')
const exec = require('child_process').exec;
const ejs = require('ejs')


inquirer 一个用户与命令行交互的工具


type:表示提问的类型,包括:input, confirm, list, rawlist, expand, checkbox, password, editor;

name: 存储当前问题回答的变量;

message:问题的描述;

default:默认值;

choices:列表选项,在某些type下可用,并且包含一个分隔符(separator);

validate:对用户的回答进行校验;

filter:对用户的回答进行过滤处理,返回处理后的值;


语法结构


const inquirer = require('inquirer');
const promptList = [
    // 具体交互内容
];
inquirer.prompt(promptList).then(answers => {
    console.log(answers); // 返回的结果
})


module.exports = [
    {
        type: "input",
        message: "请输入你的项目名称",
        name: "projectName",
        validate(val) {
            if (val.trim() == '') {
                return '项目名称不能为空'
            } else {
                return true
            }
        }
    },
    {
        type: "list",
        message: "请选择你的框架",
        name: "frame",
        choices: [
            {
                name: "Vue",
                value: "Vue"
            },
            {
                name: "Angular",
                value: "Angular"
            },
            {
                name: "React",
                value: "React"
            },
            {
                name: "jQuery",
                value: "jQuery"
            }
        ],
        filter(value) {
            return value.toLocaleLowerCase()
        }
    },
    {
        type: "confirm",
        message: "是否需要生成html文件",
        name: "isHtml",
        default: true,
    },
    {
        type: "list",
        message: "请选择你的包管理工具",
        name: "package",
        choices: [
            {
                name: "Npm",
                value: "Npm"
            },
            {
                name: "Yarn",
                value: "Yarn"
            }
        ],
        filter(value) {
            return value.toLocaleLowerCase()
        }
    },
]


2 fs 操作文件


fs.mkdir 创建文件夹  三个参数 url  权限=0777  回调


fs.writeFile 写入文件 三个参数 url 写入的参数 回调


3 ejs


ejs.render 两个参数 文件地址,options 修改的值


条件语法


  <% if (frame == 'vue') { %>
            "vue":"2.6.0"
  <% } %>


插值 语法


<%= packageName %>


4 exec


 exec(`${result.package} install`, { cwd: result.projectName })


用来执行shell脚本命令


整体代码


const inquirer = require('inquirer')
const fs = require('fs')
const path = require('path')
const exec = require('child_process').exec;
const ejs = require('ejs')
const question = require('./question')
const PACKAGEJSON = './package.json'
const getEjsTemplate = (path) => {
    return fs.readFileSync(`./template/${path}`).toString()
}
inquirer.prompt(question).then(result => {
    fs.mkdir(result.projectName, '0777', () => {
        const packageJson = getEjsTemplate('package.ejs')
        const json = ejs.render(packageJson, {
            packageName: result.projectName,
            frame: result.frame
        })
        fs.writeFile(path.join(__dirname, result.projectName, PACKAGEJSON), json, () => {
            const html = ejs.render(getEjsTemplate('html.ejs'))
            result.isHtml && fs.writeFile(path.join(__dirname, result.projectName, './index.html'), html, () => {
             })
            exec(`${result.package} install`, { cwd: result.projectName })
        })
    })
})
目录
相关文章
|
4月前
|
JavaScript 前端开发 数据安全/隐私保护
NodeJS 下构建 命令行工具(CLI) 与 交互式命令界面 的实践
NodeJS 下构建 命令行工具(CLI) 与 交互式命令界面 的实践
231 1
|
5月前
|
JavaScript 前端开发 Java
Spring Boot中Node.js的下载与Vue CLI在IDEA中的部署及使用(图文解释 简单易懂)
Spring Boot中Node.js的下载与Vue CLI在IDEA中的部署及使用(图文解释 简单易懂)
49 0
|
JSON JavaScript Shell
Node.js 获取 CLI 指定的环境变量
当我们在使用 Node.js 开发 CLI 的时候,可能碰到的问题是,想知道用户设置了哪些环境变量,或者用户对环境变量做了哪些修改。本文提供一个通用的简单思路来处理这个问题。 首先想要获取用户新设置的或者修改过的环境变量,就需要有个参照对象,也就是旧的环境变量,那么就需要获取默认的,原本的环境变量。 我们都知道在 *nix 系统中,一个进程被创建的本质是从父进程 fork 一个一模一样
506 0
|
前端开发 JavaScript 开发者
|
8天前
|
JSON JavaScript 前端开发
❤Nodejs 第九章(token身份认证和express-jwt的安装认识)
【4月更文挑战第9天】Node.js第九章介绍了Token身份认证,特别是JWT(JSON Web Token)作为跨域认证的解决方案。JWT由Header、Payload和Signature三部分组成,用于在客户端和服务器间安全传输用户信息。前端收到JWT后存储在localStorage或sessionStorage中,并在请求头中发送。Express-JWT是一个中间件,用于解析JWT。基本用法包括设置secret和algorithms。注意安全问题,避免混合使用不同算法以防止降级攻击。
34 0
|
2月前
|
JavaScript Linux 数据安全/隐私保护
node内网安装npm私服以及依赖包上传发布verdaccio
node内网安装npm私服以及依赖包上传发布verdaccio
75 1
|
3月前
|
Web App开发 缓存 JavaScript
【安装指南】nodejs下载、安装与配置详细教程
这篇博文详细介绍了 Node.js 的下载、安装与配置过程,为初学者提供了清晰的指南。读者通过该教程可以轻松完成 Node.js 的安装,了解相关配置和基本操作。文章首先介绍了 Node.js 的背景和应用场景,随后详细说明了下载安装包、安装步骤以及配置环境变量的方法。作者用简洁明了的语言,配以步骤图示,使得读者能够轻松跟随教程完成操作。总的来说,这篇文章为初学者提供了一个友好的入门指南,使他们能够顺利开始使用 Node.js 进行开发。
213 1
【安装指南】nodejs下载、安装与配置详细教程
|
3月前
|
消息中间件 Web App开发 JavaScript
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
77 0
|
1天前
|
JSON JavaScript 关系型数据库
❤Nodejs 第十六章(Nodejs环境安装和依赖使用)
【4月更文挑战第16天】本文介绍了Node.js环境安装和项目搭建步骤。检查Node.js和npm版本安装核心依赖,如Express(Web应用框架)、MySQL库、CORS(解决跨域问题)、body-parser(解析POST数据)、express-jwt和jsonwebtoken(JWT验证)、multer(文件上传处理)、ws(WebSocket支持),以及可选的dotenv(管理环境变量)和ejs(模板引擎)。完整源码可在Gitee开源项目[nexusapi](https://gitee.com/lintaibai/nexusapi)中找到。
9 0
|
8天前
|
JavaScript Linux Python
Linux 安装 Node.js | NPM
Linux 安装 Node.js | NPM
6 0