nodejs 는 readline 알림 을 이용 하여 내용 인 스 턴 스 코드 를 입력 합 니 다.
최근 에 작은 버 전 하 도 급 테스트 를 할 때 버 전 번 호 를 수정 하 는 것 을 잊 어 버 려 서 포장 하기 전에 버 전 번 호 를 입력 하 라 고 알려 준 다음 에 버 전 번 호 를 버 전 설명 에 넣 을 생각 이다.최종 효 과 는 bat 파일 을 더 블 클릭 하여 터미널 에서 버 전 번 호 를 입력 하고 입력 이 완료 되면 버 전 번 호 를 저장 합 니 다.
비록 일괄 처리 도 이 일 을 할 수 있 지만,js 로 쓰 는 것 이 더욱 능숙 하기 때문에 js 로 처리한다.
과정 은 네 단계 로 나 뉜 다.
bat 집행 js터미널 알림 버 전 번호 입력,포장 명령 실행버 전 번호 파일 수정
버 전 번호 json 파일 읽 기
쉽게 말 하면 bat 파일 로 포장 명령 을 실행 하여 포장 합 니 다.
1.bat 실행 js
먼저 두 개의 파일 buildVersion.bat,buildVersion.js 를 만 듭 니 다.
buildVersion.bat 에서 node 를 사용 하여 js 파일 을 실행 합 니 다.
@echo off
set curpath=%~dp0
%curpath%nodejs
ode.exe %curpath%buildVersion.js
pause
%~dp0 은 현재 디 렉 터 리 입 니 다.--buildType default 와 같은 js 뒤에 인 자 를 전달 할 수도 있 습 니 다.2.터미널 알림 버 전 번호 입력,패키지 명령 실행
readline 을 사용 하여 문답 효 과 를 실현 하고 child프로 세 스 가 패키지 명령 행 을 실행 합 니 다.
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())}
: `, (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())}
: `, (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'
});
3.버 전 번호 파일 수정파일 을 수정 할 때 내 가 생각 한 일 은 fs.writeFile 로 파일 을 쓰 지만,이렇게 하면 json 형식 에 대해 잘 처리 되 고,js 파일 처리 에 매우 불편 하 다.그래서 나 는 버 전 정 보 를 제 이 슨 파일 에 단독으로 저장 했다.두 개의 파일 을 만 듭 니 다.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.stringify(copyVersion), (err) => {
});
}
// 1、 new obj.constructor () , {} [], ;
// 2、 obj.hasOwnProperty(key) , for..in.. 。
// 3、 , , , 。 factorial 。 , arguments.callee。
function cloneObj(obj) {
if (obj === null) return null
if (typeof obj !== 'object') return obj;
if (obj.constructor === Date) return new Date(obj);
if (obj.constructor === RegExp) return new RegExp(obj);
var newObj = new obj.constructor(); //
for (var key in obj) {
if (obj.hasOwnProperty(key)) { //
var val = obj[key];
newObj[key] = typeof val === 'object' ? arguments.callee(val) : val; // arguments.callee
}
}
return newObj;
}
function getNowFormatDate() {
var date = new Date();
var seperator1 = "-"; //
var seperator2 = ":"; //
var month = date.getMonth() + 1;
var strDate = date.getDate();
if (month >= 1 && month <= 9) {
month = "0" + month;
}
if (strDate >= 0 && strDate <= 9) {
strDate = "0" + strDate;
}
var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate +
" " + date.getHours() + seperator2 + date.getMinutes() +
seperator2 + date.getSeconds();
return currentdate;
}
4.gulp 버 전 번호 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 힌트 입력 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Node.js를 AWS서버에서 사용하는 실습간단한 예제와 함께 AWS에서 Node.js를사용하는 법을 배워보도록 하겠다. 해당 github에 있는 레포지토리로 사용을 할 것이다. 3000번 포트로 Listen되는 예제이고 간단히 GET, POST, DELET...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.