我有一个我想在客户端和服务器端使用的库。但是,由于request
与browserify不兼容,因此在使用browserify进行编译时,我需要使用名为browser-request
的其他库
if (inNodejsRuntime) {
var request = require('request');
} else if (isBrowserifyRuntime) {
var request = require('browser-request');
}
如何检测浏览器何时运行与何时在节点内
答案 0 :(得分:44)
接受的答案是正确的。但是如果你通过谷歌搜索“检测浏览器”来获得更一般的答案,浏览器会自动转换节点提供的全局process
。您可以使用:
process.browser
在浏览器中为true
,在节点中为undefined
。
答案 1 :(得分:30)
如果您只是使用兼容的API进行简单的模块交换,则应使用package.json中的browser field。所以对于你的例子,只需做
var request = require('request')
像之前一样然后在package.json中放置:
{
"browser": {
"request": "browser-request"
}
}
这样,在浏览器中,当您require('request')
时,您将获得浏览器请求而不是请求。
这是因为即使您只是实际使用浏览器请求,您也会将浏览器请求和请求捆绑到您的前端代码中,从而导致文件大小不必要地膨胀。
答案 2 :(得分:3)
我找到了答案:
if (typeof window === 'undefined') {
var request = require('request');
} else {
var request = require('browser-request');
}
Superagent看起来也是一个非常好的选择!