我将我的配置(main.js)定义为:
require.config({
urlArgs: "bust=" + (new Date()).getTime(),
paths: {
jquery: 'jquery-1.8.3.min',
knockout: 'knockout-2.2.0',
komapping: 'knockout.mapping-latest',
token: 'jquery.tokeninput'
},
shim: {
'token': ['jquery']
}
});
编辑 main.js 是一个共享配置。我有几个页面都使用相同的设置,我不想在我的项目中到处修改特定于版本的文件名。 /编辑
并包含在页面中:
<script src="/AnswersDev/Scripts/require.js" data-main="/AnswersDev/Scripts/main"></script>
add-report.js 包含为:
<script type="text/javascript">
require(['Views/add-report']);
</script>
编辑 这似乎是原因。内联脚本有时在 main 之前运行,因此它期望找到的别名没有定义,所以它只是去寻找 .js。 /编辑
jquery.tokeninput 是 AFAIK,我使用的唯一非 AMD 模块。工作请求会产生以下请求序列(Fiddler 捕获):
- 需要.js
- main.js
- 视图/add-report.js
- 视图/add-report-wizard-model.js
- 淘汰赛-2.2.0
- jquery-1.8.3.min.js
- 视图/add-report-wizard-model-parameter.js
- 视图/add-report-wizard-model-step.js
- 淘汰赛.mapping-latest.js
非工作请求的序列如下:
- 需要.js
- 视图/add-report.js
- main.js
- 视图/add-report-wizard-model.js
- 淘汰赛.js
- jQuery.js
- 视图/add-report-wizard-model-step.js
- 视图/add-report-wizard-model-parameter.js
- 淘汰赛.mapping-latest.js
添加报告.js:
define(['jquery', 'knockout', 'Views/add-report-wizard-model'], function ($, ko, ViewModel) {
... snip ...
});
请注意,在非工作序列中, add-report.js在 require.js之前请求(我希望在加载 require.js之后应用非确定性加载顺序)以及敲除和 jquery (都具有内置的 AMD 支持)正在使用错误的文件名请求。我观察到在 add-report 之前请求 require 的其他序列,并且敲除和 jquery 文件名仍然错误。我在请求之间唯一要做的就是刷新浏览器(我还要注意,一旦它工作,它往往会继续工作,一旦它中断,它往往会保持损坏)。我试过删除urlArgs
从配置中,仍然观察到同样的问题。在此特定页面上,未使用 jquery.tokeninput。从配置文件中删除它似乎也没有任何效果。
在这一点上,RequireJS 对我来说完全不可靠,我当然不能在当前状态下将我的代码发布到生产环境中。考虑到似乎相当成功地使用 RequireJS 的人数,我只能假设问题出在我的代码中,但我不知道问题出在哪里。
有人对我可能出错的地方有任何建议吗?谢谢。
编辑:根据要求,摘自 knockout.mapping-latest.debug.js:
// Module systems magic dance.
if (typeof require === "function" && typeof exports === "object" && typeof module === "object") {
// CommonJS or Node: hard-coded dependency on "knockout"
factory(require("knockout"), exports);
} else if (typeof define === "function" && define["amd"]) {
// AMD anonymous module with hard-coded dependency on "knockout"
define(["knockout", "exports"], factory);
} else {
// <script> tag: use the global `ko` object, attaching a `mapping` property
factory(ko, ko.mapping = {});
}