2014-11-04 171 views
0

JavaScript代码告诉浏览器或NodeJS是运行在浏览器中的最佳方式是什么?如何判断在浏览器中还是在NodeJS中运行?

我正在寻找将评估为布尔值的东西。

试图访问window并捕获异常似乎相当混乱。有没有更好的办法?

+0

也不例外参与; 'nodal =(typeof window ==='undefined');' – 2014-11-04 15:32:08

+0

为什么不检查process.version,它在节点中给出以下输出:{http_parser:'1.0', node:'0.10.4', v8:'3.14.5.8', ares:'1.9.0-DEV', uv:'0.10.3', zlib:'1.2.3', modules:'11', openssl:'1.0。 1e'} – matteo 2014-11-04 15:34:24

+0

下面是我们用于Node/AMD/Browser检测的块([link](https://github.com/geraintluff/tv4/blob/master/tv4.js#L10-L19)) - 而不是布尔值(有两种以上的设置),它调用不同配置的初始化函数。 – cloudfeet 2014-11-04 15:34:35

回答

2

您可以使用UMD method的削减版本:

var isNode = (typeof exports === 'object') ? true: false; 
+4

为什么要返回一个布尔值来评估一个布尔值呢? 'var isNode = typeof exports!=='object';' – 2014-11-04 15:38:41

+1

我认为我的版本更清晰。 – Andy 2014-11-04 15:39:35

+1

如何确保将来“出口”变量不会代表对象浏览器端? – matteo 2014-11-04 15:52:24

0
var isNode = (typeof processs != 'undefined' && typeof process.versions != 'undefined' && typeof process.versions.node != 'undefined'); 
+0

@BenFortune你是对的:更正。 – matteo 2014-11-04 15:53:24

相关问题