2015-06-28 103 views
0

我用nw.js和zip下列文件到一個package.nw文件:與節點的WebKit瀏覽內部和外部文件

js/main.js 
ui/widget.html 
index.html 
package.json 

另外,我有一個沿包中附帶一個外部文件,所以我有這些到底文件:

package.nw 
settings.json 

package.json被配置爲啓動與index.html。在那裏,我鏈接js/main.js與腳本標籤:

<!-- inside index.html --> 
<script src="js/main.js"></script> 

index.html和代碼js/main.js工作完美,我測試過他們。

這兩個有趣文件(ui/widget.htmlsettings.json分別包含完美的HTML和JSON)。

Inside js/main.js我想同時加載ui/widget.htmlsettings.json。要做到這一點,我已經試過:

// inside js/main.js 
var fs, w1, w2; 

fs = require("fs"); 
w1 = fs.readFileSync("ui/widget.html"); 
w2 = require("ui/widget.html"); 

的結果是:

W1: 「」(空字符串)

W2:ERROR(意外令牌 「<」)

當我更改文件名時,我得到w1錯誤ENOENT(沒有這樣的文件或目錄)。所以我可以告訴用正確的文件名,對於w1該條目實際上在包(no ENOENT)中找到,但內容以某種方式未加載到字符串中。

w2的錯誤可能是由隱含的JSON.parse()eval()引起的,這是可以理解/可接受的。這比我預期的工作更加絕望。

所以,我試了幾個小時,但我無法讀取該文件。

對於第二種情況(外部settings.json)我已經試過這樣:

// inside js/main.js 
var fs, s1, s2, s3; 

fs = require("fs"); 
s1 = fs.readFileSync("settings.json"); 
s2 = require("settings.json"); 
s3 = require("settings"); 

對於s1我得到:

"" (empty string) 

s2

Error: Cannot find module 'settings' 

對於s3

Error: Cannot find module 'settings.json' 

看起來我無法打開該文件。我也嘗試改變目錄之前啓動nw,但無濟於事。

我用盡了所有路徑,選項,嘗試和手冊/教程/ SO問題。在這兩種不同的情況下,我做錯了什麼?


我已經重寫了一個乾淨的測試用例,但問題是完全一樣的。我省略fsnode_modules,與npm一起安裝。

這是來自另一個例子的問題。

package.json含量:

含量 index.html
{ 
    "name": "test", 
    "main": "index.html", 
    "window": { 
    "toolbar": false, 
    "width": 800, 
    "height": 480 
    } 
} 

含量
<!DOCTYPE html> 

<html> 
    <head> 
    <script src="main.js"></script> 
    </head> 
    <body> 
    </body> 
</html> 

main.js

含量 test.html
"use strict"; 

window.onload = function() { 
    var fs, html; 

    fs = require("fs"); 

    try { 
    html = fs.readFileSync("./test.html"); 
    console.log(html);   // empty string 
    } catch(ex) { 
    console.log(ex.message); // unreached 
    } 

    try { 
    html = require("./test.html"); 
    console.log(html);   // unreached 
    } catch(ex) { 
    console.log(ex.message); // error 
    } 
}; 

<div id="widget_message"> 
    @message 
</div> 
+0

根據文檔,當且僅當指定了第二個參數encoding時,fs.readFileSync()才返回一個字符串。否則它會返回一個緩衝區。你嘗試過'fs.readFileSync(「settings.json」,「utf8」);'? – Flawyte

+0

這就是我錯過的!謝謝。如果你在答覆中回覆,我會接受。 – pid

回答

1

根據文檔,當且僅當指定第二個參數encoding時,fs.readFileSync()返回String。否則它會返回一個緩衝區。

所以fs.readFileSync("settings.json", "utf8")應該做的伎倆。