检查脚本是Node还是Phantom

时间:2018-02-08 21:35:57

标签: node.js phantomjs

我有一个通用模块,为我的项目提供公共目录,NodeJS和PhantomJS脚本都使用它们。任何人都知道如何返回正在运行的脚本的简单明确函数,如果node.jsphantom.js

目前,我使用这种方法,但我不知道这是否是最好的方法

//parent directory of project directory tree
//tries to get according to Engine, Node or PhantomJS
var ROOT_DIR;
if (typeof __dirname !== 'undefined'){//nodeJS has __dirname
    ROOT_DIR = path.resolve(__dirname, '.')  + "/";
    console.log("ROOT_DIR got on Node: " + ROOT_DIR);
}
else {//PhantomJS?         
    try{
        var fs = require('fs');
        ROOT_DIR = fs.absolute("./"); //it already leaves a trailing slash
        console.log("ROOT_DIR got PhantomJS: " + ROOT_DIR);
    }
    catch(err){
        throw "Engine not recognized, nor NodeJS nor PhantomJS";    
    }
}

编辑:这个问题与仅检测节点略有不同,因为这里我们也尝试检测PhantomJS,即差异不在节点和浏览器之间,而是在节点和phantomj之间。当然,节点的检测是类似的,但是很多方法来检测节点是否正在运行,PhantomJS可能会抛出异常。

2 个答案:

答案 0 :(得分:0)

这可行吗?



const isNode = () => {
  return process && process.argv[0] === 'node';
};




答案 1 :(得分:0)

我用它来检测是否是nodeJS

if ((typeof process !== 'undefined') &&
    (process.release.name.search(/node|io.js/) !== -1)){//node
}
else{//not node, im my case PhantomJS
}

它使用节点process对象,并且由于其他模块可能具有该对象名称,因此它确保属性process.release.name中包含“node”或“io.js”。