我用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.html
和settings.json
分别包含完美的HTML和JSON)。
Inside js/main.js
我想同时加载ui/widget.html
和settings.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问题。在这两种不同的情况下,我做错了什么?
我已经重写了一个干净的测试用例,但问题是完全一样的。我省略fs
node_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>
根据文档,当且仅当指定了第二个参数encoding时,fs.readFileSync()才返回一个字符串。否则它会返回一个缓冲区。你尝试过'fs.readFileSync(“settings.json”,“utf8”);'? – Flawyte
这就是我错过的!谢谢。如果你在答复中回复,我会接受。 – pid