如何检测什么时候运行browserify?

我有一个库,我想在客户端和服务器端使用。 但是,因为request与browserify不兼容,所以在使用browserify进行编译时,我需要使用一个名为browser-request的不同库

 if (inNodejsRuntime) { var request = require('request'); } else if (isBrowserifyRuntime) { var request = require('browser-request'); } 

当浏览器正在运行的时候,以及在节点内部的时候,我该如何去检测

如果您只是使用兼容的API进行简单模块交换,则应使用package.json中的浏览器字段 。 所以对于你的例子,只是做

 var request = require('request') 

像之前一样,然后在package.json中放入:

 { "browser": { "request": "browser-request" } } 

这样在浏览器中,当您require('request')时,您将获得浏览器请求而不是请求。

不应该做的是要求两个模块运行时检查是否存在window或类似的属性。 这是因为,即使您只使用浏览器请求,也会将浏览器请求和请求捆绑到您的前端代码中,从而导致不必要的虚增文件大小。

接受的答案是正确的。 但是,如果您通过Googlesearch“browse browserify”来到这里,并希望获得更一般的答案,那么browserify会自动转换节点提供的全局process 。 您可以使用:

 process.browser 

这将在浏览器中为true ,在节点中undefined

我find了答案:

 if (typeof window === 'undefined') { var request = require('request'); } else { var request = require('browser-request'); } 

Superagent也看起来像一个非常好的select!