如果服务器需要访问套接字之类的东西,那么browserify怎么可能让服务器代码在浏览器中运行呢?

我只是不知道一些浏览器提供的function,或者这个库使用一些奇怪的解决方法来实现这些function?

其实这也不是;-)

基本上,简单的答案是:Browserify不会将所有内容都带入浏览器,而只是从技术的angular度来看,实际上是有意义的和可行的。

例如,你可以轻松拥有

url.format(...) 

在浏览器中,这意味着只能处理内存中的对象和string,但不能拥有

 http.createServer(...) 

因为这根本行不通。 除此之外,Browserify还提供了用于requiremodule.exports ,因此,您也可以在浏览器中使用CommonJS模块,但只要它们坚持那些可用的东西。 同样,例如,任何用C ++编写的CommonJS模块都不能在浏览器中工作,有或没有Browserify。

最后,Browserify使用几个基本上与Node.js API兼容的模块,但是已经为浏览器重写,例如http-browserify 。

所以,最后,这对于所谓的“同构JavaScript”来说是一个很好的工具,或者换句话说,就是在服务器和浏览器上使用CommonJS模块,而不需要任何一方的特殊模式,比如AMD或者UMD。

但是,当然,它不提供任何魔术:-)

Browserify不会将function添加到您的浏览器。 它编译你的Node.js代码,使它可以在浏览器中运行。

简而言之,Browserify允许您在浏览器端代码中使用Node的require ; 它不会授予您的浏览器对networking和文件系统function的访问权限。

相反,您需要使用(或编写)模拟服务器端function的自定义模块。 例如,如果在服务器端代码中使用数据库模块(例如,Postgres或Mongo),则可以编写一个使用浏览器支持的存储机制的新数据库模块(具有与服务器端模块相同的API) IndexedDB的。