使用node-webkit

时间:2015-06-28 19:44:40

标签: javascript require readfile node-webkit

我使用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.htmljs/main.js中的代码完美无缺,我已对其进行了测试。

两个有趣的文件(ui/widget.htmlsettings.json分别包含完美的HTML和JSON。)

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:错误(意外的标记“&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>

1 个答案:

答案 0 :(得分:1)

根据文档,当且仅当指定了第二个参数fs.readFileSync()时,String才会返回encoding。否则它返回一个缓冲区。

所以fs.readFileSync("settings.json", "utf8")应该做到这一点。