nodejs格式化教程(nodejs利用readline提示输入内容实例代码)
nodejs格式化教程
nodejs利用readline提示输入内容实例代码目录
- 前言
- 1. bat执行js
- 2. 终端提示输入版本号、执行打包命令
- 3. 修改版本号文件
- 总结
最近进行小版本发包测试时忘记修改版本号了,进而想到在打包前提示输入版本号,然后把版本号打进版本说明内。最终效果为双击bat文件在终端内提示输入版本号,输入完成后保存版本号。
虽说批处理也可以做这事,但用js来写更得心应手点,故选用js处理。
过程分为四步
- bat执行js
- 终端提示输入版本号、执行打包命令
- 修改版本号文件
- gulp读取版本号json文件
简单来说是用bat文件触发打包命令进行打包。
1. bat执行js首先创建两个文件buildVersion.bat、buildVersion.js。
buildVersion.bat中使用node运行js文件
@echo off set curpath=%~dp0 %curpath%nodejs\node.exe %curpath%buildVersion.js pause
%~dp0为当前目录。也可以在js后面传参数,如--buildType default
2. 终端提示输入版本号、执行打包命令使用readline实现问答效果,再用child_process执行打包命令行。
进入buildVersion.js文件,先写简单的提示输入效果。
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); rl.question(`请输入新版本号: `, (name) => { });
这样达不到效果。我们先显示之前的版本号,然后再提示输入新版本号,而且输入为空时沿用上次版本号。
// 获取版本信息,具体实现在第三步 var versionInfo; const versionInfoUrl = './src/config/version/version.js'; function getVersion() { var buildVersion = ""; try { versionInfo = require(versionInfoUrl); buildVersion = versionInfo.version; } catch (error) { } return buildVersion; }
提示输入变成这样
const chalk = require('chalk'); // 引入颜色库 rl.question(`${chalk.cyan("当前版本号: ")}${chalk.bold.red(getVersion())} \n请输入新版本号: `, (name) => { !name && (name=versionInfo?versionInfo.version:""); console.log(`${chalk.cyan("新版本号是: ")}${chalk.bold.yellow(name)}`);
在终端上效果为
有时版本号前会有固定前缀,我们在提示输入时把前缀显示出来,可以随意删除
// 写入默认值 rl.write("Version ")
接下来是运行打包命令。当前项目使用gulp打包。要在终端中显示gulp的提示信息,选用child_process.spawn
// 解析bat运行传入的参数 var minimist = require('minimist'); var argv = minimist(process.argv.slice(2), { string: ["name"] }); const child_process = require('child_process'); rl.question(`${chalk.cyan("当前版本号: ")}${chalk.bold.red(getVersion())} \n请输入新版本号: `, (name) => { !name && (name=versionInfo?versionInfo.version:""); console.log(`${chalk.cyan("新版本号是: ")}${chalk.bold.yellow(name)}`); // 记录新版本号 changeVersion(name); var buildType = argv.buildType || "build" // 命令为gulp中配置好的 var gulpCmd = `gulp ${buildType} --buildVersion "${name}" --color --f ${__dirname}/gulpfile.js`; console.log(gulpCmd); let spawnProcess = child_process.spawn(gulpCmd, [], { shell: true }); spawnProcess.stdout.on('data', (data) => { console.log(`${data.toString()}`); }); spawnProcess.stderr.on('data', (data) => { console.log(`stderror: ${data}`); }); spawnProcess.on('close', (code) => { if (code !== 0) { console.log(`close: $[code]`); } }); spawnProcess.on('exit', (code) => { // console.log(`exit: ${code.toString()}`); console.log(chalk.bold.yellow("----------------- 完成 --------------------")); }); }); function changeVersion(params) { if (versionInfo && versionInfo.changeVersion) { versionInfo.changeVersion(params); } }
在终端上效果为
使用其他打包工具可以这样
let exec = require('child_process').execSync; exec('vue-cli-service --mode dev build', { stdio: 'inherit' });
修改文件我想到的事用fs.writeFile写文件,但这样对json格式很好处理,对js文件处理很不方便。所以我把版本信息单独存在json文件中。创建两个文件version.js、version.json。
var VersionInfoJson; // 考虑到可能会在html中引用,做了区分 if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') { getVersionInfo(true); } else { if (typeof define === 'function' && define.amd) { getVersionInfo(false); } else { getVersionInfoLocal(); } } function getVersionInfo(isModule) { try { VersionInfoJson = require("./version.json"); } catch (error) { VersionInfoJson = {}; } VersionInfoJson.buildTime = getNowFormatDate(); VersionInfoJson.changeVersion = changeVersion; if (isModule) { module.exports = VersionInfoJson; }else{ define([], function () { return VersionInfoJson; }); } } async function getVersionInfoLocal() { try { VersionInfoJson = await getVersionJson(); } catch (error) { VersionInfoJson = {}; } VersionInfoJson.buildTime = getNowFormatDate(); window.VersionInfo = VersionInfoJson; } function getVersionJson() { return new Promise((resolve, reject)=>{ var request = new XMLHttpRequest(); request.open("get", "config/version/version.json"); request.send(null); request.onload = function () { if (request.status == 200) { var json = JSON.parse(request.responseText); resolve(json); }else{ var json = {}; resolve(json); } } }); } function changeVersion(version) { var copyVersion = cloneObj(VersionInfoJson); copyVersion.version = version; if (copyVersion.hasOwnProperty("changeVersion")) { delete copyVersion["changeVersion"] } // console.log(copyVersion, __dirname, __filename) let fs = require('fs'); fs.writeFile(__dirname + "/version.json", JSON.stri.jpg" alt="nodejs格式化教程(nodejs利用readline提示输入内容实例代码)" border="0" />
4. gulp读取版本号json文件
这一步就简单了。可以直接引用json。
const versionInfo = require('./src/config/version/version.js');
也可以从gulp命令中拿到版本号。
var minimist = require('minimist'); var argv = minimist(process.argv.slice(2), { string: ["name"] }); console.log(argv.buildVersion)
做近一步的处理。
总结到此这篇关于nodejs利用readline提示输入内容的文章就介绍到这了,更多相关nodejs readline提示输入内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- nodejs数据采集(nodejs获取表单数据的三种方法实例)
- nodejs爬虫(node.js做一个简单的爬虫案例教程)
- nodejs启动web服务器(使用NODE.JS创建一个WEBSERVER服务器的步骤)
- nodejs请求页面(node.js+postman实现模拟HTTP服务器与客户端交互)
- nodejs如何识别接口(Node实现搜索框进行模糊查询)
- nodejs的广播机制(node.js如何自定义实现一个EventEmitter)
- pythonweb和nodejs(Node与Python 双向通信的实现代码)
- docker node 分阶段构建(Docker安装、创建镜像、加载并运行NodeJS程序的详细过程)
- nodejs json文件读写(nodejs将JSON字符串转化为JSON对象报错的解决)
- nodejs子进程调试(Node.js实现断点续传)
- nodejs八种命令(详细谈谈NodeJS进程是如何退出的)
- nodejsweb服务(Nodejs实现内网穿透服务)
- nodejs怎么查看对象的全部属性(浅谈nodejs中创建cluster)
- nodejs部署上传文件(node.js使用express-fileupload中间件实现文件上传)
- nodejs实现websocket服务端(Node.js+express+socket实现在线实时多人聊天室)
- nodejs登录案例(利用Node.js创建一个密码生成器的全步骤)
- 招财化煞神兽,金蟾变了(招财化煞神兽金蟾变了)
- 26岁杨紫的白素贞遇上24岁鞠婧祎,哪个最美(26岁杨紫的白素贞遇上24岁鞠婧祎)
- 鞠婧祎和杨紫两种风格的女生,你心里谁比较美(鞠婧祎和杨紫两种风格的女生)
- 三千年第一美女鞠婧祎出演白素贞pk杨紫,颜值胜赵雅芝王祖贤(三千年第一美女鞠婧祎出演白素贞pk杨紫)
- 成都轨道交通13号线一期工程最新进展(成都轨道交通13号线一期工程最新进展)
- 越南没事(越南没事情做)
热门推荐
- js扫雷小游戏源代码(原生js实现简单贪吃蛇小游戏)
- docker 改变存储位置方式(修改Docker镜像默认存储位置的方法解决方法)
- elasticsearch docker(在Docker中安装Elasticsearch7.6.2的教程)
- zabbix基本监控配置(zabbix使用教程+受监控服务器的添加安装教程)
- python3.7.0使用方法(Python3.5模块的定义、导入、优化操作图文详解)
- dedecms标签调用原理(DEDECMS安全设置 执行php脚本限制设置方法apache+nginx)
- python udp网络编程(python实现一个简单的udp通信的示例代码)
- vue element 表格上拉加载数据(Vue组件库ElementUI实现表格加载树形数据教程)
- mysql 多表连接查询(MySQL多表查询的具体实例)
- mybatis 分页查询配置(mybatis-plus分页传入参数后sql where条件没有limit分页信息操作)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9