2016-09-21 104 views
0

我正在尝试优化require.js应用程序。该应用程序使用Durandal编写,我们通过gulp-durandal插件访问r.js(这仅仅是r.js的一个包装,带有用于构建Durandal应用程序的合适默认值)。R.js optimmiser未加载所有依赖项

当我在本地机器上运行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')); 
     } 
    } 
}; 

});

在工作本地任务中,将导入所有这些文件及其依赖项。例如,上面的文件将立即进入构建;时刻不在默认应用程序文件中,而是在requirejs config的路径中指定。当在构建服务器上运行相同的任务时,包含上述文件,但不包括时刻。当我然后尝试运行构建的文件时,发现模块未找到(即上面显示的模块未找到,但我可以在文件中看到它)的错误。

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

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

我已经尝试了各种配置,有或没有杏仁,有或没有uglify,删除任何排除,相对路径,绝对路径,将findNestedDependencies设置为true,以及使用insertRequire显式加载main.js,但没有喜悦。有谁知道什么可能导致这种情况?

感谢您的任何帮助。

回答

0

原来,这与r.js无关。我们使用的是打字稿,看起来服务器上的版本不是编译给AMD,而是使用commonjs格式。