美文网首页
读<了不起的Node.js>-07.对命令行一探究竟

读<了不起的Node.js>-07.对命令行一探究竟

作者: 在路上的海贼 | 来源:发表于2018-08-04 16:45 被阅读0次

    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!');
            })
        }
    });
    
    • 虽然有效但是很慢...

    相关文章

      网友评论

          本文标题:读<了不起的Node.js>-07.对命令行一探究竟

          本文链接:https://www.haomeiwen.com/subject/dfumvftx.html