【问题标题】:compile RequireJS to remove AMD dependency编译 RequireJS 以移除 AMD 依赖
【发布时间】:2013-03-17 14:59:06
【问题描述】:

我在开发中使用 RequireJS 来管理我的依赖项,但在生产中我想删除对 AMD 加载程序的所有依赖项。看起来 RequireJS 优化器创建了一个在运行时仍然使用 AMD 负载的文件 - 我只是希望拥有一个静态(非 AMD 依赖,但仍然与 AMD 兼容)文件,例如 jquery 生成的文件(通过查看 jquery源,看来他们在他们的 grunt 文件中手动排序了他们的依赖项)。这可能吗?

我也愿意使用 RequireJS 以外的其他库。

注意:这与我的另一个问题 Javascript requirejs in development but compiled in production 类似,但在这种情况下,我想一起删除 AMD。

【问题讨论】:

  • 如何使用较小的 AMD 加载程序,例如 Almond? - github.com/jrburke/almond
  • @SimonSmith 我的目标是从编译版本中删除 AMD。编译成单个文件时,为什么要使用 AMD?
  • 我对此也很好奇,因为我不希望 AMD 成为必需品(刚好够用)——你最终解决了这个问题吗?
  • 现在我只是手动排序我的依赖项并将它们连接起来(使用 gradle 插件,但希望切换到 grunt 或 yeoman 之类的东西以变得更复杂并与 require 集成)。事实证明,在我的情况下,大多数依赖顺序并不重要。

标签: javascript optimization requirejs concatenation amd


【解决方案1】:

如果您希望通过 <script> 标签或 AMD 加载您的脚本,那么您可能希望使用基于 how my EventEmitter class exposes its self 的内容。

// Expose the class either via AMD, CommonJS or the global object
if (typeof define === 'function' && define.amd) {
    define(function () {
        return EventEmitter;
    });
}
else if (typeof module !== 'undefined' && module.exports){
    module.exports = EventEmitter;
}
else {
    this.EventEmitter = EventEmitter;
}

这会通过 AMD、CommonJS(节点)和全局对象(即window)公开对象。这有一个主要警告,它适用于只想通过 AMD 公开其类的单文件脚本。

如果您有很多模块,那么您可能需要先用r.js 编译脚本,用Almond 填充AMD,然后使用类似上述的方法以上述多种方式公开它。

【讨论】:

    【解决方案2】:

    https://github.com/kodmax/grunt-stonejs 就是答案。 将基于 requirejs 的项目编译为 JS Stone。 基本为零开销。

    【讨论】:

      【解决方案3】:

      我和你有同样的问题。

      最后我解决了,我已经创建了 requireJS 项目的基本结构和执行自动化的 Gruntfile。

      1. 处理更少
      2. 优化 requireJS。
      3. 移除 AMD
      4. 将 HTML 中的脚本标签从 require 语法替换为脚本标签 sintax。

      希望对你有帮助。

      https://github.com/sheldorn/require-base-structure

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-20
        • 1970-01-01
        • 1970-01-01
        • 2011-06-07
        • 2012-12-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多