AMD的共享库是个好主意吗?

时间:2013-11-22 09:38:32

标签: javascript requirejs

我是JS开发的新手,并试图找出开发和使用AMD库的一些最佳实践。假设我正在开发一个javascript库,它依赖于jquery,下划线和其他任何东西。此外,我想使这个库成为一个AMD模块,并将其优化为一个大的单片文件。但问题是,如何整体?它是否应该引入jquery和下划线以使其完全独立?看起来这种方法的优点和缺点是:

Pro:它易于使用

  • 作为使用此库的应用程序开发人员,您只需获取它并添加依赖项,而无需知道您需要jquery,下划线等。
  • 无需使用路径配置requirejs
  • 不用担心一个库需要jquery 1.x而另一个库需要2.x
  • 的情况

Con:它臃肿

  • 如果主应用程序或其他库也需要使用jquery,这似乎很可能会被下载两次(或n次)

我在这里缺少什么?那么这是正确的方法,或者是“它取决于”或“制作两者的版本”的答案?看起来通常你想在可能的情况下共享代码,但是它将责任放在具有非包含依赖性的库的使用者身上,并且需要一个工具来解决约束以找到给定库的版本,这是兼容所有相关组件。那里有什么能做到这样的事吗?

2 个答案:

答案 0 :(得分:1)

我想不出有任何理由将第三方库(例如jQuery或Underscore)包含在您自己的库中。很少见到这种技术在任何地方使用,如果有的话,因为它过多地限制了你的代码的消费者。

不仅会像你说的那样增加膨胀,但是如果我想使用Zepto或Lo Dash,或者不同版本的jQuery呢?如果您的库只是将jQuery和Underscore列为依赖项,那么我可以轻松地将它们映射到加载备用版本或库。

AMD(和RequireJS)的用户通常非常适合在几乎所有情况下配置路径,地图和垫片,所以我不担心。

将所有内容分开也可以在优化JS进行生产时提供灵活性。例如,我经常喜欢将构建jQuery转换为main模块,该模块在所有页面上加载并设置其他模块以将其排除。

我的意思是一个例子,可以在这里看到: https://github.com/simonsmith/modular-html-requirejs

答案 1 :(得分:0)

我想说你应该提供一个未经优化的版本和一个优化的版本。如果由于某种原因你不能同时做到这两点,那么只提供未经优化的版本。为什么没有优化的版本?

  • 您的代码可能没有错误。使用您的库的人更容易追踪错误,如果原始源与他们在调试环境中观察到的内容之间存在1对1映射,则可能更容易提供补丁。 (我已经尝试了源地图。他们 有用,但产生了时髦的结果。)

  • 你自己说过:像jQuery这样的库可能会在最终的应用程序中被加载n次。如果您提供一种方法让开发人员只使用您的库,他们可以运行测试来确定他们是否可以只用一个替换不同版本的jquery。 (大多数情况下,图书馆提到或发布了特定版本的jQuery,这只是因为它恰好是制作库时的当前版本,而不是因为依赖于硬件。)

提供优化版本,以便只想尝试我们的库的人可以快速完成。

你问:

  

似乎一般情况下你想在可能的情况下共享代码,但它将责任放在具有非包含依赖关系的库的使用者身上,并且需要一个工具来解决约束以找到给定的版本与所有相关组件兼容的库。那里有什么能做到这样的事吗?

是。一个测试套件。作为图书馆的消费者,我不太可能使用没有实质性测试套件的图书馆。作为软件的生产者,如果没有实质性的测试套件,我就不会生产软件。正如我上面所说的,通常是一个依赖于jQuery或下划线或者有什么东西的库,你会列出在开发库时碰巧出现的任何版本。