Node.js 在npm安装期间检测节点webkit

Node.js 在npm安装期间检测节点webkit,node.js,npm,node-webkit,Node.js,Npm,Node Webkit,我正在为node.js开发一个库,它主要作为本机模块构建。因此,当人们试图将其包含在node webkit项目中时,他们必须使用nw gyp而不是node gyp重新编译它。我知道,当我们的构建代码运行时,我们可以通过以下方式检测节点webkit: 试一试{ isNodeWebkit=(typeof require('nw.gui')!=“未定义”); }捕获(e){ isNodeWebkit=false; } 但是,我想在我们的安装脚本中检测到这一点(由npm install运行)。或者,

我正在为node.js开发一个库,它主要作为本机模块构建。因此,当人们试图将其包含在node webkit项目中时,他们必须使用
nw gyp
而不是
node gyp
重新编译它。我知道,当我们的构建代码运行时,我们可以通过以下方式检测节点webkit:


试一试{
isNodeWebkit=(typeof require('nw.gui')!=“未定义”);
}捕获(e){
isNodeWebkit=false;
}


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

为了查看您自己的包。json您可以这样做

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

我希望这会有所帮助。

我最终编写了一个模块来实现这一点:(还支持atom shell和重命名的nw.js)

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

简单地说:

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

但并没有迹象表明引擎在那个里。也许您可以解析package.json来找到根索引文件,然后解析该索引文件中提到的.js脚本,看看是否引用了nw、gui?