存取參數
你可以透過process.argv來存取到命令列參數,它是一個包含下列內容的陣列:
[ nodeBinary, script, arg0, arg1, ... ]
也就是說,第一個參數是從process.argv[2]開始的,你可以像下面這樣遍歷所有的參數:
process.argv.slice(2).forEach(function (fileName) {
...
});
如果你想對參數做更複雜的處理,可以看一下Node.js模組nomnom和optimist.下面,我們會多次用到檔案系統模組:
var fs = require('fs');
讀取一個文字檔案
如果你的檔案不是很大,你可以將整個檔案全部讀進記憶體,放到一個字串中:
var text = fs.readFileSync(fileName, "utf8");
然後,你可以分割這個文字,一行一行的處理.
text.split(/r?n /).forEach(function (line) {
// ...
});
對於大的檔案,你可以使用流來遍歷所有的行.mtomis在Stack Overflow給了一個解決方案.
寫入一個文字檔案
你可以透過字串將完整的內容寫入一個檔案.
fs.writeFileSync(fileName, str , 'utf8');
或者你也可以以增量的方式把字串寫入流中.
var out = fs.createWriteStream(fileName, { encoding: "utf8" });
out.write(str);
out.end( ); // 目前和destroy()和destroySoon()一樣
跨平台考慮
決定行終止符.
解決1:到字串中,搜尋"rn",如果找不到就判定行終止符是"n".
var EOL = fileContents.indexOf("rn") >= 0 ? "rn" : "n";
解決2:偵測系統平台.所有的Windows平台都返回"win32",64位系統也是.
var EOL = (process.platform === 'win32' ? 'rn' : 'n')
處理paths
當處理檔案系統路徑時可以處理檔案系統路徑時使用path模組.這樣可以確保使用了正確的PATH分隔符號(Unix上用"/",Windows上用"").
var path = require('path');
path.join(mydir, "foo");
運行腳本
如果你的shell腳本名為myscript.js,那麼你可以這樣運行它:
node myscript.js arg1 arg2 ...
在Unix上,你可以在腳本的第一行加上一句程式碼,告訴作業系統應該拿什麼程式來解釋這個腳本:
#!/usr/bin/env node
你還必須給腳本一個可執行的權限:
chmod u x myscript.js
現在腳本可以獨立運行了:
./myscript.js arg1 arg2 ...
其他話題
.
process
readable stream
.- processreadable stream.
process- readable stream.process
readable stream
.process是一個全域物件.
運行shell命令:通過child_process.exec().相關文章
Tip: load source from a file in the Node.js shell
Execute code each time the Node.js REPL starts