我在AMD的环境中工作并使用Require.js。它还使用KnockOut作为框架。这里的问题是我刚下载了一个针对淘汰赛的插件,这个插件在很大程度上取决于knockOut。
现在由于我的应用程序的AMD性质的一些问题,我并不完全知道,我的插件无法正常工作,并且在加载插件时抛出Ko未定义的错误。
那些曾经遇到过类似问题的人的建议是什么?
答案 0 :(得分:2)
很棒的里德,我昨晚迷失了3个小时,所以这就是交易: 发生的事情是映射插件(例如)定义了一个硬编码的依赖关系,对于node,commonjs或amd,对于你需要指定你的淘汰插件“route”或“path”的requirejs,例如:我的淘汰文件被重命名为ko.js并映射到ko.mapping.js,它们位于我在路径配置中重命名为“lib”的文件夹插件中
require.config({
baseUrl: "js/",
paths: {
"lib" : "plugins"
}
});
在这种情况下,必须在映射插件中重命名的行是相同的但不是版本号,你只需要放置你的ko文件的位置。
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(["lib/ko", "exports"], factory);
} else {
// <script> tag: use the global `ko` object, attaching a `mapping` property
factory(ko, ko.mapping = {});
}
根据我的经验,我在lib下有我的ko文件并重命名为ko,所以如果你的文件在“js / knockout /”文件夹下并且被重命名为knockout-debbug-last-2.2.0.js你需要改变
的同一行define( [ 'js/knockout/knockout-debbug-last-2.2.0' ] , factory );
该硬编码行是导致插件加载失败的原因。
注意:我把它写成答案而不是评论,因为评论中的代码看起来很糟糕。