2020年4月8日 星期三

MacOS上使用nw.js讀寫檔案的坑

最近用nw.js在寫桌面程式,想把原本的for windows的程式改為跨平台,但是一下子就遇到好 幾個坑,紀錄一下心得...


  • 最好使用絕對路徑
    • 在win底下,我把設定檔寫成javascript變數,存成.js檔,需要時用script src='setting.js' 讀取回來
    • 在mac底下,nw.js要讀取檔案前面要使用 file:// 開頭,否則nw.js會把他當成chrome的擴充程式要去讀取,就會出現 chrome-extension://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/setting.js 404 not found 的錯誤
      所以要寫成 script src='/var/tmp/setting.js'
  • 檔案權限問題
    • 在mac上,權限控管比較嚴格,選用的路徑當然會有限制了,精美的官方文件告訴我們使用者資料最好放在/usr/local底下,把特,人生最重要的就是這個把特!!! /usr/local 這個目錄的權限還是root,底下的其他目錄權限才是使用者,所以你如果沒用 sudo 先開好你要的資料夾並給予權限,還是寫不進去...,所以 /usr/local/xxx/setting.js 會無法寫入,要改成 /usr/local/var/xxx/setting.js 才可以,就...很醜 XD
    • 我個人建議,程式不重要的檔案暫存路徑就放 /var/tmp/ 底下吧,預設權限是777,爽~~~
  • 還是檔案權限問題...
    • 第一點說到,mac底下,nw.js讀取檔案要使用 file:// 開頭,是的! 只有讀取檔案要加 file:// ,如果你在寫入檔案的時候加入,就算你是要寫一個檔案到777權限的資料夾,他一樣會跳出 read only file system 的錯誤...真是無敵大的坑你知道嗎....
    • 所以,要寫一個跨平台的nw.js,如果要使用暫存檔的話,記得把讀取跟寫入的路徑分開,才不會出現錯誤...