【问题标题】:Detecting node-webkit during npm install在 npm install 期间检测 node-webkit
【发布时间】:2015-01-25 02:56:47
【问题描述】:

我正在开发一个主要作为原生模块构建的 node.js 库。因此,当人们试图将它包含在 node-webkit 项目中时,他们必须使用 nw-gyp 而不是 node-gyp 重新编译它。我知道当我们构建的代码使用这样的东西运行时,我们可以专门检测 node-webkit:

try { isNodeWebkit = (typeof require('nw.gui') !== "undefined"); } catch(e) { isNodeWebkit = false; }

但是,我想在我们的安装脚本(由npm install 运行)中检测到这一点。或者,我们查看自己的package.json,但有没有办法查看根项目的package.json?这样我们至少可以查看一些属性,可能是engine 或其他什么?

【问题讨论】:

  • 但是没有迹象表明引擎是 node-webkit。也许你可以解析 package.json 找到根索引文件,然后解析那个索引文件中提到的 .js 脚本,看看是否引用了 nw,gui ?

标签: node.js npm node-webkit


【解决方案1】:

就这么简单:

isNodeWebkit = (typeof process == "object");

【讨论】:

    【解决方案2】:

    我最终编写了一个模块来执行此操作:https://github.com/maxkorp/which-native-nodish(也支持 atom-shell 和重命名的 nw.js)

    要点是您从模块的父目录开始,只要您是 node_modules 文件夹的子文件夹,该文件夹是具有 package.json 的文件夹的子文件夹,就一直向上。到达根级别后,检查 package.json 中的引擎属性以获取 atom-shell、node-webkit 或 nwjs 属性。不能保证工作(最远的祖先项目必须指定它是否以这种方式使用节点引擎),但总比没有好,并且是我见过的唯一开箱即用的解决方案。

    【讨论】:

      【解决方案3】:

      为了查看你自己的 package.json,你可以这样做

      gui = require(nw.gui); 
      myPackageJSONFile = gui.App.manifest; // this will get the package.json file
      

      我希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2018-12-08
        • 2016-03-30
        • 1970-01-01
        • 2019-08-30
        • 2020-10-22
        • 2016-07-31
        • 2023-03-17
        • 2017-07-04
        • 1970-01-01
        相关资源
        最近更新 更多