我们在安装包或运行命令npm init的时候,通常会有一些询问提示信息,当你完成了这些提示信息后,系统会自动生成一个package.json文件,那这个过程是如何实现的呢?
今天我们用node来写一下。
let fs = require('fs');
let readline = require('readline');//逐行读取
var rl = readline.createInterface({ //创建交互
output: process.stdout,
input: process.stdin
})
function askQuestion(title){
return new Promise((resolve)=>{
rl.question(title,(answer)=>{ //阻塞监听,输入内容后解除阻塞
resolve(answer);
});
});
}
rl.on('close',()=>{ //完成后关闭
process.exit(0);
});
// 写文件
function fsWrite(path,content){
return new Promise((resolve,reject)=>{
fs.writeFile(path,content,{flag:'a',encoding:'utf-8'},(err)=>{
if(err){
reject(err);
} else {
resolve('ok');
}
})
})
}
async function createPackage(){
let name = await askQuestion('您的包名叫?');
let main = await askQuestion('主程序入口文件是?');
let content = `{
"name": "${name}",
"version": "1.0.0",
"description": "",
"main": "${main}",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
} `;
await fsWrite('./package.json',content);
rl.close();// 关闭
}
createPackage();
要注意的是,我们一般会将node中的异步操作都用promise封装起来,然后利用async/await请求信息。
网友评论