【问题标题】:How to load external node module in node-webkit application如何在 node-webkit 应用程序中加载外部节点模块
【发布时间】:2014-03-03 17:08:28
【问题描述】:

我在 node-webkit 应用程序中加载节点模块时遇到问题。

例如模块usb (https://npmjs.org/package/usb)。

它已从 npm (npm install usb --save-dev) 成功安装并在简单的 Node.js 中运行,也已由 nw-gyp 成功重建以在 node-webkit 中使用。

我的app.nw 中没有包含node_modules 文件夹,因此使用grunt 构建后,我的文件结构如下:

  • app.exe
  • nw.pak
  • ffmpegsumo.dll
  • icudt.dll
  • libEGL.dll
  • libGLESv2.dll
  • [节点模块]
    • [USB]
      • binding.gyp
      • package.json
      • ...
      • [构建]
        • [发布]
          • usb_bindings.node
          • usb_bindings.lib
          • usb_bindings.bdb
          • usb_bindings.exp
          • [物件]
            • ...

当我尝试在我的应用程序中加载此模块时,使用以下代码:

var usb = require('usb');

我收到一个错误

Error: Cannot find module 'usb'

为什么 node-webkit 不能加载这个模块?

附言pathurlhttp 等所有默认模块都有效。

【问题讨论】:

  • 您可能需要使用 node-webkit 应用程序打包您的模块才能使用它们。
  • 是的,如果我将 node_modules 文件夹包含到 app.nw 中,它就可以工作。但是这个决定增加了 .exe 文件的大小。我使用了多个模块,如果我包含所有模块,我将获得接近 50MB 的 app.exe。
  • 如果大小是一个问题,您可能可以删除一些您包含的 .dll。例如,ffmpegsumo.dll 和 libEGL*.dll 不是强制性的。您将找到此here 的参考资料。至于将您的模块与您的应用程序捆绑在一起,我担心没有其他方法可以做到这一点。

标签: javascript node.js usb libusb node-webkit


【解决方案1】:

就我而言,问题有两个原因:

  1. 如果我想使用用 C++ 编写的节点模块,我不能为我的应用程序自定义名称(在我的例子中是“app”),我应该使用默认名称“nw”。 https://github.com/rogerwang/node-webkit/wiki/Using-Node-modules#3rd-party-modules-with-cc-addons

  2. 据我了解,无法使用函数“require”将模块从外部文件夹“node_modules”加载到应用程序中。

【讨论】:

    【解决方案2】:

    您是否尝试过使用指向模块源代码的绝对路径? (通常可以从 GitHub 或者简单的谷歌搜索获得)

    例如,如果您想从绝对路径加载 adm-zip 模块:

    var AdmZip = require(pathToModuleSource + "/adm-zip");
    

    【讨论】:

      【解决方案3】:

      在你的 package.json 中添加权限

          "permissions": [
              "usb",
          ],
      

      https://developer.chrome.com/apps/declare_permissions#usb

      【讨论】:

        猜你喜欢
        • 2014-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-08
        • 1970-01-01
        • 2014-09-16
        • 2015-01-21
        • 2013-08-17
        相关资源
        最近更新 更多