【问题标题】:Require.js build arrangementRequire.js 构建安排
【发布时间】:2013-03-25 00:09:04
【问题描述】:

我的基于 require.js 的项目的文件安排如下:

  • lib 文件夹:一些库
  • app.js : 在 html 中添加为 data-main
  • main.js : 这是主应用程序文件

在 app.js 中,有一个 requirejs.config 和一个 require 调用来加载所有库,以及 main.js(这将需要一些其他模块,这些模块是我自己的脚本)。 这看起来像这样:

require(['lib/jquery/jquery-1.8.2.min'],

    function() {

        require(['main']);
    }
);

所以有一些 AMD 不兼容的库(这里只有 jquery)首先加载到全局空间中,然后调用 main.js(及其所有依赖项)。 这工作正常,但现在我尝试使用 require.js 的优化器进行构建,但我遇到了这个问题: 如果我进行构建:“node r.js -o build.js”(build.js 只是选择 app.js 作为输入) main.js 和它的所有依赖项都没有被丑化并内置到结果文件中,它们保持相同的方式。

现在,如果我在库列表的末尾添加“main”,这些库将与所有依赖项一起很好地被丑化到输出文件中。我认为依赖关系已经实现,因为 main.js 位于最后,但问题是,如果我运行代码(我编写的)的正常、未修饰和未优化版本,因为它有时会同时加载库main 将首先加载,因此不满足依赖项。

似乎我必须有一个用于开发和一个用于构建的应用程序版本?但我确信有更好的方法。如果它更有意义,我愿意将我的文件重新排列为任何其他结构,但这也是我在 require js 官方示例代码中看到的方式..

【问题讨论】:

    标签: build requirejs


    【解决方案1】:

    听起来像main.js 应该是您的data-main 脚本,并且您应该将jquery 定义为main.js 中的依赖项。例如你的main.js 可能看起来像:

    require.config({
      shim: {
        'jquery': {
          exports: '$'
        }
      },
      paths: {
        'jquery': 'lib/jquery/jquery-1.8.2.min'
      }
    });
    define([
      'jquery'
      //more libraries here
    ], function($) {
      //main code here
    });
    

    【讨论】:

    • 谢谢!我将 app.js 和 main.js 分开的原因是 app 负责首先下载所有外部库(这些库通常是非 amd 库),而 main 是我的第一个模块,它只定义了其他模块的要求我自己的代码。你的建议似乎是一个很好的解决方案,但保持这种分离会很好。难道没有办法吗?想知道构建过程如何检测要最小化和包含的内容,是否只是每个模块中的定义和要求调用?
    猜你喜欢
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    相关资源
    最近更新 更多