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 힌트 입력 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기