为节点和浏览器环境构建包

Roe*_*mer 9 javascript node.js npm

我已经开发出一种节点NPM包主要是一个包装(使用节点的http,https并且querystring对于一个特定的JSON API模块).它是在Coffeescript中构建的,并使Node.js服务器能够与此API通信.Api主要是REST.

现在我希望这个库也可用于浏览器.这意味着http需要用XMLHttpRequest(异步)替换对模块的调用.在我看来,我会为适配器制作一个包装器.对于Node环境,此适配器会将所有调用传递给http模块,将浏览器环境传递给XMLHttpRequest对象.

是否有一个很好的方法来构建一个构建系统,以便npm包包含两个版本,我也可以在Github上发布简单的"浏览器版本"?然后,节点包可以通过require('package-name')并且应该将JS文件(用于浏览器)放在目录中.

我查看了Component,这对于客户端软件包管理非常好,但问题仍然是如何创建不同的构建环境.

Ami*_*obo 5

使用browserify交叉开发node.js和浏览器的示例解决方案:https : //github.com/amitayd/grunt-browserify-jasmine-node-example和我的博客文章中的讨论)。

特别是对于具有不同的Browser / Node.js实现,请检查PersistentReaderWriter.js

一旦有了一些可以开始使用browserify的模板,并且意识到了一些陷阱,您可能会发现您也想将其用于小型库。

编辑:请注意,如果您浏览模块,则isBrowser()检查不应通过检查是否定义了module和module.exports来完成,因为Browserify的包装程序将在模块上下文中对其进行定义。相反,在我的示例中,我检查了要定义的窗口。