【问题标题】:R.js optimmiser is not loading all dependenciesR.js optimmiser 未加载所有依赖项
【发布时间】:2016-09-21 18:34:43
【问题描述】:

我正在尝试优化 require.js 应用程序。该应用程序是使用 Durandal 编写的,我们正在通过 gulp-durandal 插件访问 r.js(这只是 r.js 的一个包装器,具有适合在 gulp 中构建 Durandal 应用程序的默认值)。

当我在本地机器上运行 gulp 任务时,一切正常。但是,当我们尝试在构建服务器(Team City)上运行完全相同的 gulp 任务时,构建会失败。构建过程中没有抛出错误,看起来是成功的,但是生成的 js 文件是本地构建版本的三分之二,缺少一些文件。

当我打开登录 r.js 时,构建服务器上的任务似乎没有引入正确的依赖项。例如,在我的第一个定义调用的 main.js 中,我引入了“绑定/绑定”,它指向一个导入列表

define(["require", "exports", './validationOnChange', './sortCode',       './currency', './maskedAccountNumber', './showInfo', './scrollTo', './validation', './slideDown', './datepicker', './numericInput', './date', './command', 'bindings/worldPay', './collapse'], function (require, exports) {
"use strict";

});

这些导入之一的示例是

define(["require", "exports", 'knockout', 'moment'], function (require, exports, ko, moment) {
"use strict";
ko.bindingHandlers['date'] = {
    init: function (element, valueAccessor, allBindingsAccessor) {
        var val = ko.unwrap(valueAccessor());
        if (val) {
            $(element).html(moment(val).format('DD/MM/YYYY'));
        }
    }
};

});

在本地工作任务中,所有这些文件连同它们的依赖项一起被导入。例如,上面的文件将拉入构建中; moment 不在默认的应用程序文件中,而是在 requirejs 配置的路径中指定。当在构建服务器上运行相同的任务时,会包含上述文件,但不包含 moment.然后,当我尝试运行构建的文件时,出现找不到模块的错误(即,虽然我可以在文件中看到,但找不到上面显示的模块)。

根据 r.js 日志,我的本地机器上的构建过程会加载 main.js,然后根据需要遍历依赖树引入文件。然后它会在默认应用程序目录下引入任何尚未加载的文件。

但是,在服务器上,r.js 会加载 main.js 文件和它的显式依赖项,但不会继续通过依赖项链,而是直接加载 app 文件夹下的所有文件。

我尝试了各种配置,有或没有 almond,有或没有 uglify,删除了所有排除项、相对路径、绝对路径,将 findNestedDependencies 设置为 true,并使用 insertRequire 显式加载 main.js,但没有任何乐趣。有谁知道是什么原因造成的?

感谢您的帮助。

【问题讨论】:

    标签: javascript gulp requirejs durandal


    【解决方案1】:

    事实证明,这与 r.js 无关。我们正在使用 typescript,似乎服务器上的构建没有编译到 AMD,而是使用了 commonjs 格式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-27
      • 2016-08-17
      • 1970-01-01
      • 2016-06-26
      • 2011-05-23
      • 2022-01-01
      • 2020-03-01
      • 2019-01-03
      相关资源
      最近更新 更多