我找到了一个解决方案,尽管它不是最初想到的,但具有不同的构建环境。
就我而言,我有一个非常小的库,它使用 Node 的、http
和https
包。我不想使用Browserify之类的东西,因为将所有这些包捆绑到一个小型 api 库中似乎不合适。相反,我用XMLHttpRequest包替换了and功能。由提供的小功能可以很容易地重写。querystring
url
http
https
querystring
url
在我的库中,我检查运行时window.XMLHttpRequest
对象是否可用。如果是这样,请使用该(本机)对象。否则,它使用包提供的那个。像这样:
_getRequestObject: () ->
if window? and window.XMLHttpRequest?
return new window.XMLHttpRequest()
if window? and window.ActiveXObject?
try
request = new ActiveXObject('Msxml2.XMLHTTP')
catch e
try
request = new ActiveXObject('Microsoft.XMLHTTP')
catch e
XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest
return new XMLHttpRequest()
另一个问题exports
是没有在浏览器中定义。有一些包可以模拟这种行为,但同样,它不想让库膨胀。所以我再次检查运行时是否module
设置了变量。如果是这样,我定义的对象被设置为那个,否则它被设置为window
对象:
if typeof module is 'undefined'
window['My-module'] = My_module_object
else
module.exports = exports = My_module_object
这一切都对我有用,因为我没有真正需要的 Node.js 依赖项,这些依赖项在浏览器环境中不存在。恐怕对于大型项目,确实需要像Browserify这样的解决方案,但我仍然很好奇是否还有其他解决方案,例如在为 Node.js 打包库或为(例如)Bower 时创建不同的构建环境。