2015-06-28 45 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")应该做的伎俩。