我有一个通用模块,为我的项目提供公共目录,NodeJS和PhantomJS脚本都使用它们。任何人都知道如何返回正在运行的脚本的简单明确函数,如果node.js
或phantom.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可能会抛出异常。
答案 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”。