Node.js 我们如何检测脚本是通过命令行还是通过浏览器启动的?
在PHP中,有PHP_SAPI变量,因此在PHP中我制作了: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'; } 如果要检
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
将在浏览器上评估为真实。我不想区分服务器端和客户端。我启动了我的网站,它用你的方法告诉我[对象全局],所以我不知道这是一个命令行任务而不是一个网站。