CLI(Command Line Interface for batch scripting)
- 完成了首个命令行程序之后,有必要学习一些API,他们对于书写在终端运行的类似程序很有帮助
argv
-
process.argv包含了所有node程序运行时的参数
- image.png
-
第一个元素是node文件所在路径,后面是调用文件路径,在这之后才是真正的参数
- image.png
-
接下来要学会获取真正的元素
- image.png
- image.png
-
去除前两个元素才显示真正参数
-
学会获取两个不同的目录,一个是程序本身所在的目录,一个是程序运行时的目录
工作目录
-
在此之前我们用
__dirname
来获取执行文件时该文件在文件系统中所在的目录 -
有的时候,我们希望获得程序运行时的当前工作目录,以前例而言,如果在home目录下运行改程序,获取当前工作目录和掐他目录下运行时一样的,因为Index.js文件的路径始终没有变化,因此__dirname 也不会变
-
而==获取当前工作目录可以调用
process.cwd
方法==: - image.png
-
打印结果
- image.png
-
node还提供了process.chdir方法允许灵活的更换目录
-
实验不出来..尴尬
- image.png
环境变量
- node 允许process.env变量来轻松访问windows的环境变量路径
退出
- 要让一个程序退出可以调用
process.exit
并提供一个退出码,建议写1
信号
- 进程和操作系统进行通信的其中一种方式就是通过信号,例如,要让进程终止,SIGKILL
- node程序是通过在process对象上以事件分发的形式来发送信号的
process.on('SIGKILL',function(){
//信号已经收到
});
ANSI转义码
- 要在文本终端下控制格式.颜色以及输出其他输出选项,可以使用ANSI转义码.
- 在文本周围添加的明显不用于输出的字符,称为非打印字符
- 例如
console.log('\033[90m'+data.replace(/(.*)/g,' $1')+ '\033[39m');
- \033 表示转义序列开始
- [ 表示开始颜色设置
- 90 表示前景色为亮灰色
- m 表示颜色设置结束了
- 最后我们用的是39,没错 这是用来将颜色再设置回去的
对fs一探究竟
- fs模块允许通过 Stream API来对数据进行读写 与readFile及writeFile不同,它对内存的非配不是一次完成的
stream(流)
- fs.createReadStream方法允许为一个文件创建一个可读的流对象
fs.readFile('test.txt', function (err, contents) {
// console.log(contents.toString());
});
let stream = fs.createReadStream('test.txt');
stream.on('data', function (chunk) {
console.log(chunk);
});
stream.on('end', function (chunk) {
console.log(chunk);
});
- 第一个可以理解就是当整个文件读取完毕,载入ram,可用的情况下才会触发
- 第二个是用来处理大文件,分步进行读取,并每次读取后触发回调函数
- 第二个理解不是很好 要加强
监视
- node允许监视文件或者目录是否发生变化,监视意味着当文件系统中得文件发生变化时候会分发一个事件,然后触发指定的回调函数
- 下面我们来监视一个文件的变化
let fs = require('fs');
<!--let stream = fs.createReadStream('test.txt');-->
//获取目录下的所有文件
let files = fs.readdirSync(process.cwd());
console.log(process.cwd());
files.forEach(function (file) {
//监听后缀为.css的文件
console.log(file);
if (/\.css/.test(file)) {
fs.watchFile(process.cwd() + '/' + file, function () {
console.log(' - ' + file + ' changed!');
})
}
});
- 虽然有效但是很慢...
网友评论