【问题标题】:Requiring/running JavaScript outside of node-webkit application在 node-webkit 应用程序之外要求/运行 JavaScript
【发布时间】:2014-03-11 21:05:15
【问题描述】:

假设我有以下应用结构:

outer-folder/
├── my-app/
└── settings.js

其中my-app/ 是包含package.json 的未构建目录打包的应用程序my-app.exemy-app.app

我无法将settings.js 与我的应用程序的其余部分打包在一起,因为我希望此文件可供用户编辑,并在启动时加载以配置我的应用程序。此外,我计划允许settings.js 驻留在任何地方(例如,在用户的主目录中)并可以从那里加载。

当应用程序未构建时,这可以正常工作。我只有一个文件的相对路径和require() 它像往常一样。但是当应用程序被构建时(使用grunt-node-webkit-builder 如果这会有所不同)这会失败并且我得到可怕的“找不到模块”错误。

我已经搜索了 node-webkit wiki,但找不到任何关于此问题的信息,我是否遗漏了什么? 从打包的 node-webkit 应用程序加载和运行外部 JavaScript 文件的最佳方式是什么,就像使用 require() 一样?

【问题讨论】:

    标签: javascript node-webkit


    【解决方案1】:

    我建议您使用应用程序数据路径。 参见文档here

    一个例子

    var gui = require('nw.gui');
    var path = require('path');
    var yaml = require('js-yaml');
    var fs = require('fs');
    
    var confPath = path.join(gui.App.dataPath, 'conf', "dev-conf.yml");
    try {
      conf = yaml.load(fs.readFileSync(confPath, 'utf-8'));
    } catch (err) {
      throw new Error("Cannot read or parse configuration file '"+confPath+"': "+err);
    }
    

    将代码和配置分开是一个很好的做法,App.dataPath 针对用户应用程序数据中的应用程序特定文件夹(每个操作系统不同)。

    我通常使用安装程序将我的配置文件复制到其中。

    下一个提示:我更喜欢使用 YAML 而不是 JSON 进行配置或设置,因为它允许您在文件中插入 cmets。

    【讨论】:

    • 感谢您的回答,应用程序数据路径是我最终使用的。但是,我做了一些不同的事情......而不是使用安装程序,我在应用程序启动时检查数据路径中的所需文件,如果内部版本不存在,则复制它们。也感谢 YAML 的建议,我会研究一下!
    • 当我在 server.js 中执行 var gui = require('nw.gui'); 时,我得到`无法找到模块 'nw.gui'`,尽管我使用 nwjs 启动应用程序
    • 您可以使用 css 从外部文件夹中引用图像和其他内容吗?
    猜你喜欢
    • 2017-08-04
    • 1970-01-01
    • 2014-12-07
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 2015-01-21
    相关资源
    最近更新 更多