Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 我们如何检测脚本是通过命令行还是通过浏览器启动的?_Node.js - Fatal编程技术网

Node.js 我们如何检测脚本是通过命令行还是通过浏览器启动的?

Node.js 我们如何检测脚本是通过命令行还是通过浏览器启动的?,node.js,Node.js,在PHP中,有PHP_SAPI变量,因此在PHP中我制作了: if('cli' == PHP_SAPI) { //my code } Node.JS中的等效项是什么 if (typeof Window === 'undefined') { //node } else { //browser } 或者你可以把它变成一个函数 function isBrowser() { return typeof Window !== 'undefined'; } 如果要检

在PHP中,有PHP_SAPI变量,因此在PHP中我制作了:

 if('cli' == PHP_SAPI)
 {
   //my code
 }
Node.JS中的等效项是什么

if (typeof Window === 'undefined') {
    //node
}
else {
    //browser
}
或者你可以把它变成一个函数

function isBrowser() {
    return typeof Window !== 'undefined';
}

如果要检测到自己在Node.js中,请查看
process.title

不过最好检测您需要的任何功能,因为您希望您的代码与尽可能多的运行时兼容


检测全局变量的名称可能很有用:

var global = function(){ return this }()

switch (global.toString().toLowerCase()) {
  case '[object window]':
    return "I'm a browser"
  case '[object global]':
    return "I'm a node.js"
  default:
    return "wat?"
}

您仍然可以假装这样做,但我怀疑是否有人会这样做。

我可能会首先检查
窗口
对象的存在,同时查看您是否希望检测脚本是否在节点中运行?或者您想检测Node.js是否是通过浏览器启动的?如果是后者,您如何使用浏览器启动Node.js?我的“supervisor-q-w fwk lpcms index.js”脚本总是使用Node.js。事实上,我想知道我们是否来自Symfony的控制台任务,或者我们只是想显示一个站点。也许,最简单的方法就是在我的控制台任务开始时定义一个变量isConsole=true。js@Brad在节点中定义全局比在浏览器中定义要困难得多。它显然可以定义,但99.99%不是,如果是,代码应该被删除。相反,我可以说,不能保证
过程。标题
未在浏览器中定义。正如我在上面的评论中所说,当然不能保证。但是,我已经看到很多模块在Node.js中定义了一个
窗口
对象来填充行为。@Brad这只是我个人的观点,我不会担心。当然,有人也可以在浏览器中轻松设置它。@OrangeDog显然,但有人可以设置任何东西,所以没有保证的方法<代码>窗口
由多个NPM模块定义。我从未见过浏览器模块去设置
进程。title
,但这肯定是可能的。只是一个包含
进程的流行browserify工具代码的参考。使用browserify打包的title
将在浏览器上评估为真实。我不想区分服务器端和客户端。我启动了我的网站,它用你的方法告诉我[对象全局],所以我不知道这是一个命令行任务而不是一个网站。