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 })
        })
    })
})
目录
相关文章
|
资源调度
Cannot find module ‘\node_modules\ejs\postinstall.js
Cannot find module ‘\node_modules\ejs\postinstall.js
129 0
|
6月前
|
JavaScript 前端开发 数据安全/隐私保护
NodeJS 下构建 命令行工具(CLI) 与 交互式命令界面 的实践
NodeJS 下构建 命令行工具(CLI) 与 交互式命令界面 的实践
435 1
|
6月前
|
JavaScript 前端开发 Java
Spring Boot中Node.js的下载与Vue CLI在IDEA中的部署及使用(图文解释 简单易懂)
Spring Boot中Node.js的下载与Vue CLI在IDEA中的部署及使用(图文解释 简单易懂)
127 0
|
NoSQL 前端开发 JavaScript
node连接mongodb,ejs,cookie基础使用
node连接mongodb,ejs,cookie基础使用
|
前端开发 JavaScript 数据库
Nodejs——fs模块,asnyc await使用,ejs模板引擎
(2) fs.mkdir 创建目录 fs.mkdir(function(){}) (3) fs.writeFile 创建写入文件 fs.writeFile(function(){}) (4)fs.appendFile 追加文件 如果追加的文件不存在的话,会自动创建,然后追加内容 如果原本存在的话,就直接追加内容
149 0
|
NoSQL 前端开发 JavaScript
从零开始搭建Node.js, Express, Ejs, Mongodb服务器
第1部分 – 15分钟安装 如果你真的是从零开始学,那就花点时间先把环境搭建起来吧。这不难,我用的是Win8,所以这看上去跟那些用Mac和Ubuntu或者其它*nix系统的教程有点区别,不过大致是一样的。 第1步 – 安装Node.JS 这很容易,进入Node.js官方网站,点击绿色的大Install按钮,它会自动检测你的系统并给你一个正确的安装文件的下载。(如果没有
3326 0
|
JSON JavaScript Shell
Node.js 获取 CLI 指定的环境变量
当我们在使用 Node.js 开发 CLI 的时候,可能碰到的问题是,想知道用户设置了哪些环境变量,或者用户对环境变量做了哪些修改。本文提供一个通用的简单思路来处理这个问题。 首先想要获取用户新设置的或者修改过的环境变量,就需要有个参照对象,也就是旧的环境变量,那么就需要获取默认的,原本的环境变量。 我们都知道在 *nix 系统中,一个进程被创建的本质是从父进程 fork 一个一模一样
543 0
|
前端开发 JavaScript 开发者
|
Web App开发 JavaScript 关系型数据库
node.js 安装配置 npm ,express,ejs模板
本人近端时间看了下node.js,学习是从菜鸟教程   http://www.runoob.com/nodejs/nodejs-tutorial.html 入门。 首先讲一下体会,首先自己是个java程序员,刚接触node.js,有点新鲜就去学了,首先是安装windows版的node.js。如果不熟悉环境配置,要选择msi格式的,因为安装的过程中会把环境变量给你配好。好了安装好以后,要安
3701 0