• 在线编译系统之nodejs执行shell


      最近公司做个简单的小工具,是一个简单的在线编译系统。现在做几点简单的总结记录。

     1、路径的问题。

      node程序执行的路径,可能会影响程序中的相对路径使用。(这点有待进一步研究,分析理论)因此就用到了path模块。之前也没觉得这个模块有多重要,这次才发现它的方便。下面几个是我用到的。

      以下只是自己的简单理解,可能并不表达的那么准确,具体请参考nodejs的官网api。(建议看英文版的,中文版还是稍微有些不全的)

      path.resolve(from, to)  : from是一个绝对路径,to是一个相对路径,最终to的绝对路径。注意,to若是一个目录,则这个路径得到的是一个目录的路径,但这个路径最后没有“/”。若是文件,则是文件的绝对路径。

      path.relative(from,to): from和to都是绝对路径,得到from相对于to的相对路径。

      path.basename(p,[ext]):  得到路径最后的文件名,包括后缀名。如果加了ext参数项,则只返回文件的名字,不包括后缀名。

      path.extname(p):得到文件的后缀名,包括“.”。

      path.dirname(p):得到路径的目录名.不包括最后的“/”。

      path.join(args1, arg2....): 将各个参数合并为一个路径,并且规范化。 

    2、nodejs执行shell

      在这个编译系统中,很多东西都是用shell完成的。shell确实很重要,也需要花点时间去补充理论知识。

      在nodejs中执行shell,使用child_process.有三种方法,spawn,exec和execFile。spawn没怎么使用,所以我就没发言权,说下exec和execFile。前者建议使用于语句量小的,当然也可以执行多个语句,每个命令字符串用分割符连接。如果语句量多,还是建议使用文件。

      在执行shell,很重要的一点就是路径问题。因为shell中使用的相对路径相会失效。因为执行一个shell,会新建一个子进程,主进程的proces.env会传递到子线程。需要在主进程进入子进程前使用process.chmdir(),切换到shell的执行目录下。nodejs的api也非常周到,其中有个opts的参数,可以设置opts.cwd。来改变shell的执行环境。

    3、简单的shell编程

      自己没有shell的编程经验,所以无权说什么。有一点就是参数的传递,$1就是第一个参数,等等。

    4、async

      async模块一个非常重要。因为代码中设计很多异步函数,这样代码结构就非常乱。async的使用,可以是程序显得更简洁易看。

    async.series({
    
      one :func1(cb){},
    
      two.func2(cb){}
    
      .....
    
      function(err, ){
    
      });
    
    });
    

      只要有一个函数有错误就返回。最终会把每个的cb组成一个对象的元素。也可以定为数组。

      更多需要进一步学习。

     5、关于编程

      刚开始定任务自己就闷头干,代码写的很乱。而且中间需求变更带来的痛苦.....后来稍微用面向对象的重构了一下。所以,以后尽量要建立面向对象编程的思维,更立体,也更有利于维护。

  • 相关阅读:
    USACO Section 1.3 : Mixing Milk
    USACO Section 1.3 : Prime Cryptarithm
    USACO Section 1.2 : Name That Number
    USACO Section 1.3 : Calf Flac
    USACO Section 1.2 : Palindromic Squares
    Global.asax详解
    sql语句字符串处理大全
    ASP.net:URL重写实现IHttpHandler接口
    asp.net中使用基于角色role的Forms验证
    时间Table.TransformColumns(Power Query 之 M 语言)
  • 原文地址:https://www.cnblogs.com/yilinfengluo/p/4769507.html
Copyright © 2020-2023  润新知