【问题标题】:Ultimate JS module solution for UMD with dependencies?具有依赖关系的 UMD 的终极 JS 模块解决方案?
【发布时间】:2013-11-27 19:40:59
【问题描述】:

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

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

CommonJS 版本继续npm UMD 包装的模块将被推送到bower

包装器必须在浏览器(AMD + 全局)和 Node.js(任何和其他 CommonJS 系统,如果可能的话)中工作。最好使用 Grunt 进行任何自动化(我在 grunt 中非常方便)。

我花了很长时间在 Google 上搜索,但它是一团糟。

一些不太成功的有希望的人(或者我错过了一些东西,这是完全可能的):

  • 浏览
  • 胶水
  • 咕噜咕噜

我到处都能找到像这样的绝望构造:http://rathercurio.us/building-umd-modules-with-dependencies-with-browserify,但我对这种骇客行为并不感冒。

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

编辑:澄清:最后说的,理想的解决方案不应该要求我们手工组装大量样板模板代码并创建新的错误。不过,我很喜欢配置和指定东西。

【问题讨论】:

    标签: javascript node.js module amd commonjs


    【解决方案1】:

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

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

    其中大部分使用简单但功能强大的声明和可选的回调来进行细粒度操作。它适用于独立的配置文件(.js.coffee.json.yml 等)和原样作为gruntjs config

    uRequire 使用 javascript、coffeescript、livecriped、coco 和 icedcoffeescript 编写的源模块编译,无需任何插件。

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

    uRequire 是开源的,MIT 许可证和hosted on github,由我创作:-)

    【讨论】:

    • urequire.org 提出了一些大胆的主张 :) 但假设它提供了它很可能是 One。您是否还支持源映射(包括转换/合并?)我经常使用 TypeScript 和 grunt_concat_sourcemap(两者都生成映射),当然,即使在将它们引入 AMD 之后,也更愿意调试原始源。
    • 好吧,如果它提供了,请亲自尝试:-) uRequire 最初是一个用于将 AMD 简单转换为 UMD 的宠物项目,但此后添加了许多功能,将其转换为可以执行的工具90% 的常见任务都可以在典型的 gruntfile 中找到,只有 10% of the effort and boilerplate。不幸的是,sourcemaps 和 TypeScript 是它尚未涉及的两个功能,但应该:-(
    • 我真的很喜欢 UMD 功能,它是非常酷的技术。只有我总是喜欢为高级用户使用我自己选择的(打字稿)编译器(这里是 grunt-ts),一个特定的编译器将具有比通用捆绑版本更多的功能(“做一件事并做好”) .但是现在几乎需要源图生成(和转换)。我们将如何调试生成的代码?通过我们用来到达那里的任何管道手动从捆绑包中进行查找? 2010 年就是这样 :)
    • 是的,我同意 sourcemaps 非常热门,不幸的是我没有时间在 urequire 中实现它们,尽管我希望在未来的某个时候将它们烘焙。打字稿也是如此,because of its bundling of deps。我想如果您有编写良好的测试(和类型系统:-),您不应该 need 对源代码进行如此多的 next-next-next :-)
    • @AgelosPikoulas 有关于源地图的消息吗?
    猜你喜欢
    • 1970-01-01
    • 2014-12-29
    • 2010-10-16
    • 2019-03-21
    • 2015-11-02
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2014-09-06
    相关资源
    最近更新 更多