具有依赖关系的UMD的终极JS模块解决方案

Ultimate JS module solution for UMD with dependencies?

本文关键字:JS 模块 解决方案 UMD 依赖 关系      更新时间:2023-11-07

我维护并协作使用CommonJS编写的一些JavaScript模块,这些模块需要高质量的UMD包装器。

依赖项来源于npm,但至少支持CommonJS和AMD(或者我可以添加它)。

CommonJS版本在npm上运行。UMD封装的模块将被推送到bower

包装器必须在浏览器(AMD+全局)和Node.js(如果可能的话,任何和其他CommonJS系统)中工作。任何自动化都应该最好使用Grunt(我在Grunt方面很得心应手)。

我花了很长时间搜索谷歌,但它一团糟。

一些有希望的人并没有完全切断它(或者我错过了一些东西,这是完全可能的):

  • 浏览
  • 胶水
  • 咕哝umd

我到处都能找到这样绝望的结构:http://rathercurio.us/building-umd-modules-with-dependencies-with-browserify,但我对这种花招并不感冒。

有什么好的建议吗?我会接受任何指针、链接或提示。

编辑:澄清:最后一点是,理想的解决方案不应该要求我们手工组装大块的样板模板代码并创建新的bug。不过,我对配置和指定东西很冷静。

您的第一站也是最后一站应该是urequire.org,这是一个通用模块转换器,它不仅可以将CommonJS和AMD javascript模块转换为UMD(或者AMD或CommonJS,或者使用rjs/ammond的独立模块)。

它允许您在转换时操作Module的代码和依赖项:注入、替换或删除代码和依赖关系,导出到全局对象(window)或您的捆绑包,注入&可选地合并公共代码(如初始化),添加运行时信息,缩小等等。

其中大多数使用简单但功能强大的声明&用于细粒度操作的可选回调。它可以与独立的配置文件(.js.coffee.json.yml等)一起工作,并作为grumjs-config

uRequire从用javascript、coffescript、livescriped、coco&没有任何插件的icedcoffescapet。

忘记样板,代码仪式和重复要求。转换模板基于众所周知的UMDj,但可以通过声明进行自定义以隐藏或提供功能。

uRequire是开源的,MIT许可证,托管在github上,由我撰写:-)