如何检测脚本是在浏览器中还是在Node.js中运行?

jcu*_*bic 10 javascript node.js

我有jasmine测试规范文件,我想使用node.js和浏览器运行它.如何检测脚本是否在节点中运行?

小智 16

一些想法:

您可以检查窗口全局对象,如果它可用,那么您在浏览器中

if (typeof window === 'undefined')
// this is node
Run Code Online (Sandbox Code Playgroud)

或者您可以检查进程对象,如果它可用,那么您在节点中

if(typeof process === 'object')
// this is also node
Run Code Online (Sandbox Code Playgroud)

  • 我发现许多提议的解决方案如果代码已经被webpack,就会停止工作,因为webpack定义了所有类型的`process`,`module`,`require`等符号.`window`通常仍然有效,除非你当然还想检测从webworker运行,那里没有`window`. (4认同)
  • 对“window”的检查不会在 WebWorker 中工作...:)但是,对“process”的检查将在所有环境中正常工作afaiu (2认同)

Din*_*yan 13

有一个专门用于此的 npm 包,它可以在客户端和服务器端使用。

浏览器或节点

您可以像这样在代码中使用它

import { isBrowser, isNode } from 'browser-or-node';

if (isBrowser) {
  // do browser only stuff
}

if (isNode) {
  // do node.js only stuff
}
Run Code Online (Sandbox Code Playgroud)

免责声明:我是这个包的作者:)

  • 这个包中的功能做得最好+1 (2认同)