Dependency injection 宝华;amd模块 案件

Dependency injection 宝华;amd模块 案件,dependency-injection,requirejs,amd,gruntjs,bower,Dependency Injection,Requirejs,Amd,Gruntjs,Bower,我正在尝试建立一个大型javascript项目的最方便的解决方案 要求如下: 模块化javascript:如果需要,在全局名称空间中只包含一个对象 与鲍尔组件兼容 与grunt兼容:由grunt完成构建和部署(contrib usemin或contrib requirejs) 令我惊讶的是,这竟然是一项不平凡的任务。 我在使用AMD时遇到以下问题: 装载bower部件并非易事。例如,如果不修改源代码,就无法使用AMD加载Raphael。在使用bower时,这实际上不是一个选项,因为我只将依赖项列

我正在尝试建立一个大型javascript项目的最方便的解决方案

要求如下:

  • 模块化javascript:如果需要,在全局名称空间中只包含一个对象
  • 与鲍尔组件兼容
  • 与grunt兼容:由grunt完成构建和部署(contrib usemincontrib requirejs
  • 令我惊讶的是,这竟然是一项不平凡的任务。 我在使用AMD时遇到以下问题:

  • 装载bower部件并非易事。例如,如果不修改源代码,就无法使用AMD加载Raphael。在使用bower时,这实际上不是一个选项,因为我只将依赖项列表推送到git。另外:加载不支持AMD的javascript库可能会出现问题,但包含多个文件(如jQueryUI);我需要把它整理一下
  • De requirejs optimizer将所有内容构建到一个文件中,不允许将库与站点脚本分离。这似乎是一件明智的事情
  • 当我不使用AMD时,我会遇到其他问题:

  • 如何控制大型项目中的依赖关系
  • 可能的解决办法 因此,我正在考虑一个解决方案:

  • 保持它的便携性,不要强迫未来的用户使用AMD
  • 防止全局命名空间混乱
  • 与鲍尔保持兼容
  • 允许usemingrunt中建造整个地块
  • 它将由一个定义
    require(,)
    的小脚本和一个实现基本模块定义和注入的`define(,)函数组成。它不会实现任何异步加载或具有不匹配依赖项的脚本队列

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

    现在,我可以使用requirejs或微型依赖项注入器与手动
    加载结合使用。当使用后一个选项时,我仍然需要使用如下方式注册加载的非amd库:

    define( 'raphael', [], function() { return Raphael; })
    
    你觉得怎么样?我在做一些理智的事情吗?重新发明轮子?不必要的复杂

    更新 我想我可以用杏仁来达到上述目的

    装载bower部件并非易事。例如,如果不修改源代码,就无法使用AMD加载Raphael

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

    De requirejs optimizer将所有内容构建到一个文件中,不允许将库与站点脚本分离。这似乎是一件明智的事情


    那不是真的。阅读

    您对RequireJS的设置如何?如果不使用异步加载,为什么不使用Browserify?