gpt4 book ai didi

dependency-injection - Bower 和 AMD 模块

转载 作者:行者123 更新时间:2023-12-02 14:17:59 25 4
gpt4 key购买 nike

案例

我正在尝试找到建立大型 JavaScript 项目的最方便的解决方案。

要求是:

  1. 模块化 javascript:如有必要,只需全局命名空间中的一个对象
  2. 与 Bower 组件兼容
  3. 与 grunt 兼容:由 grunt 完成构建和部署(contrib-usemincontrib-requirejs)

令我惊讶的是,这并不是一项简单的任务。我在使用 AMD 时遇到以下问题:

  1. 加载 bower 组件并不总是那么容易完成。例如,如果不修改源代码,就无法使用 AMD 加载 Raphael。使用 Bower 时这确实不是一个选项,因为我只将依赖项列表推送到 git。另外:加载不支持 AMD 的 javascript 库,可以进行填充,但包含多个文件(如 jquery-ui)是有问题的;我需要将其整合在一起。
  2. De requirejs 优化器将所有内容构建到一个文件中,不允许选择将库与站​​点脚本分开。做一些看似理智的事情。

当我不使用 AMD 时,我会遇到其他问题:

  1. 如何控制大型项目中的依赖关系?

可能的解决方案

所以我正在考虑一个解决方案:

  1. 保持便携,不要将 AMD 强加给 future 的用户
  2. 防止全局命名空间困惑
  3. 与 Bower 保持兼容
  4. 允许usemingrunt中构建整个批处理

它将包含一个定义 require( <deps>, <factory> ) 的小脚本。和一个 `define( , , ) 函数,它实现基本的模块定义和注入(inject)。它不会实现任何异步加载或具有不匹配依赖项的脚本排队!

此外,我将使用命名模块模式而不是使用匿名模块来定义任何模块。尽管这会牺牲最小程度的可移植性。

现在我可以将 requirejs 或那个小型依赖注入(inject)器与手册结合使用 <script src=""></script>加载中。当使用后一个选项时,我仍然需要使用如下方式注册加载的非 amd 库:

define( 'raphael', [], function() { return Raphael; })

你觉得怎么样?我正在做一些理智的事情吗?重新发明轮子?不必要的复杂?

更新

我想我可以使用杏仁 ( https://github.com/jrburke/almond ) 来实现上述目的。

最佳答案

Loading bower components cannot alwasy be done easily. Raphael for example cannot be loaded using AMD without modifying the source

您可以使用 requirejs 中的 shim 配置来加载通常不可加载 AMD 的模块。 (或者拉斐尔真的是一个特例吗?)

De requirejs optimizer builds everything into one file, not allowing the option to seperate libraries from site scripts. Something that seems a sane thing to do.

恕我直言,这不是真的。阅读http://requirejs.org/docs/optimization.html#wholemultipage

关于dependency-injection - Bower 和 AMD 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15774775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com