我使用nw.js并将文件压缩到package.nw
文件中:
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。)
在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:错误(意外的标记“&lt;”)
当我更改文件名时,我得到w1
错误ENOENT
(没有这样的文件或目录)。所以我可以用正确的文件名告诉我,对于w1
,条目实际上是在包(无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
的内容:
{
"name": "test",
"main": "index.html",
"window": {
"toolbar": false,
"width": 800,
"height": 480
}
}
index.html
的内容:
<!DOCTYPE html>
<html>
<head>
<script src="main.js"></script>
</head>
<body>
</body>
</html>
main.js
的内容:
"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
}
};
test.html
的内容:
<div id="widget_message">
@message
</div>
答案 0 :(得分:1)
根据文档,当且仅当指定了第二个参数fs.readFileSync()
时,String
才会返回encoding
。否则它返回一个缓冲区。
所以fs.readFileSync("settings.json", "utf8")
应该做到这一点。