使用node-webkit實現打包工具的小結


之前一直使用的hta在開發工具,最近轉到node-webkit上了,對比一下二者的優劣勢。hta單個文件,體積較小,但有兼容性的問題(兼容ie6、7、8就行了,也還好),node-webkit使用webkit內核,可以直接使用html5、css3的相關特性,比如圓角、漸變等,比較方便,界面炫一些,但在windows下最大的問題就是體積較大。

 

還有就是node-webkit在windows下進行資源的copy時,容易報error但它是一個空的Error對象,里面並沒有errCode和它的信號相關信息,hta沒有這個問題很穩定。不過讀寫文件和網絡請求處理上面來講,還是node.js方便,一行代碼就能解決戰斗,所以盡管體積偏大,我還是傾向於node-webkit進行開發。

 

下面來總結一下遇到的坑:

1、編碼問題

一個是使用child_process調用dos相關的命令時,得到的輸出有中文全部就亂碼了,例如調用devenv.com編譯項目,除英文字符外其它幾乎都是亂碼,很不好判斷到底編譯項目成功還是失敗了

 

二是,使用Notepad2默認創建的txt文件,它的編碼居然是utf8+,帶BOM的,太坑了,獲取文件內容時它的頭部居然帶一個“?”,結果程序一跑,alert也沒發現啥問題,ctrl + c、ctrl + v出來的時候才發現里面帶一個?

 

2、exec方法的回調函數中,需要對error進行進一步的判斷,僅判斷error是否為null容易誤判,因為實際我比較復制后的文件跟源文件夾大小和文件數量是一致的。

process.exec(command_str, function(error, stdout, stderr) {

console.log("copy PALACE_CARD_M_RES error : ", error);

if (error && error.code) {//code、signal
showMessage("文件復制失敗," + JSON.stringify(error));

return ;
}

showMessage("PALACE_CARD_M_RES文件夾復制成功");
//todo..
});
 
不然,僅用if(error) {}進行判定, 很容易程序中斷,后續函數無法繼續運行。我這個是在copy大約35M左右的文件夾內容時遇到的,可能是時間過長導致的,待驗證…
 
 
3、使用request模塊時,注意需要保存cookie;
比如我先登錄OA,然后調用OA的接口,如果不保存cookie那么調用就會失敗。而hat就是一個瀏覽器進程,所以它不存在這個問題。使用下面的代碼解決它:
request = request.defaults({jar: true});

 

4、svn相關注意事項

svn需要先update,然后再add,最后才是commit,這三步都是程序在進行處理,但順序不能亂,不然就game over了。其中如果你所使用的svn服務器是需要添加注釋的,在使用程序自動處理時別忘記了-m參數,不然也是提交失敗的~ ~,並且你還拿不到出錯信息(就一個errCode和信號id還有是否被kill掉的相關信息)

 

5、node-webkit安裝xml2json模塊還安裝不上,沒辦法改用xml2js了。這個沒找到同步方法,先監聽它的end方法然后再做處理,比較蛋疼

 

6、使用上傳組件input file時,需要注意它的屬性,根據自己的需要使用

<input type="file" multiple />

<input type="file" accept=".doc,.docx,.xml,application/msword">

<input type="file" webkitdirectory />

<input type="file" nwdirectory />

<input type="file" nwsaveas />

<input type="file" nwsaveas="filename.txt" />

其中ebkitdirectory跟nwdirectory效果是一樣的,其它幾項相信看到描述也大概知道什么意見了

 

暫時記錄這么多,下次再用它開發工具應該不會再遇到這么多坑了…


免責聲明!

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



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