我正在尝试优化require.js应用程序。该应用程序是使用Durandal编写的,我们通过gulp-durandal插件访问r.js(这只是一个r.js的包装器,带有适当的默认值,用于在gulp中构建Durandal应用程序)。
当我在本地机器上运行gulp任务时,一切正常。但是,当我们尝试在构建服务器(Team City)上运行完全相同的gulp任务时,构建将失败。在构建过程中没有抛出任何错误,它似乎是成功的,但生成的js文件是locallly构建版本的三分之二,缺少一些文件。
当我打开登录r.js时,似乎构建服务器上的任务没有引入正确的依赖项。例如,在我的第一个定义调用中的main.js中,我引入了“bindings / bindings”,它指向了一个导入列表
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不在默认的app文件中,但是在requirejs config的路径中指定。当在构建服务器上运行相同的任务时,包含上述文件,但不包括时刻。当我然后尝试运行构建的文件时,出现错误,找不到模块(即,虽然我可以在文件中看到,但是找不到上面显示的模块。)
根据r.js日志,我本地计算机上的构建过程会加载main.js,然后根据需要引导依赖树引入文件。然后它会引入默认app目录下尚未加载的任何文件。
但是,在服务器上,r.js加载main.js文件并且它是显式依赖项,但是不会继续通过依赖链,而是直接加载app文件夹下的所有文件。
我尝试了各种配置,有或没有杏仁,有或没有uglify,删除了任何排除,相对路径,绝对路径,将findNestedDependencies设置为true,并使用insertRequire显式加载main.js,但没有快乐。有谁知道是什么原因引起的?
感谢您的帮助。
答案 0 :(得分:0)
事实证明,这与r.js无关。我们正在使用typescript,看起来服务器上的构建没有编译到AMD,而是使用了commonjs格式。