在線編譯系統之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、關於編程

  剛開始定任務自己就悶頭干,代碼寫的很亂。而且中間需求變更帶來的痛苦.....后來稍微用面向對象的重構了一下。所以,以后盡量要建立面向對象編程的思維,更立體,也更有利於維護。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM