无法使用 JSPM 实例化模块 kendo.directives
Failed to instantiate module kendo.directives using JSPM
我正在尝试加载 Kendo UI All 与 Angular 的集成,以便能够使用其内置的 UI 小部件指令。
我使用以下命令安装了软件包:jspm install kendo-ui
在某些文件中,我正在导入 jQuery、Angular 和 Kendo UI:
import jquery from "jquery";
import ng from "angular";
import kendoUi from "kendo-ui";
angular.module("common", [
"kendo.directives"
]);
我的 config.js
看起来如下:
...
map: {
"kendo-ui": "github:kendo-labs/bower-kendo-ui@2016.1.125"
}
...
...当我加载应用程序时,我收到了整个 "Failed to instantiate module kendo.directives"
错误消息。
似乎 Kendo UI 核心代码在 Angular 出现之前执行,或者我认为是这样,因为 Kendo UI 的文档状态:
To activate the Angular bindings, load angular.js before you load
Kendo UI. Therefore, load the scripts in the order shown below.
此外,我尝试通过添加 meta
属性 到 config.js:
来解决这个问题
meta: {
'kendo-angular': {
exports: 'kendo',
deps: [
"jquery",
"angular",
"kendo-ui"
]
}
}
...以及 map
的条目:
"kendo-angular": "github:kendo-labs/bower-kendo-ui@2016.1.125/js/kendo.angular.min"
现在似乎已加载 kendo.angular.min.js
,但它会抛出以下错误消息:"Cannot read property 'jQuery' of undefined"
...
更新
问题似乎根本不是加载顺序:没有使用我昨天做的试错(关于 map
和 meta
的事情),错误 "Failed to instantiate module kendo.directives"
不应该发生,因为包正在加载 kendo.ui.core
,其中已经包含模块 kendo.directives
.
另一方面,我试图在所谓文件的未缩小版本上放置断点,结果是定义 Angular kendo.directives
模块的代码永远不会执行,但是源代码的其他部分,当我设置断点时,它被命中并且 Angular 出现在全局范围内。
最后我设法解决了这个问题。
在config.js
:
...
meta: {
"kendo-ui": {
deps: ["kendo.ui.core"]
},
"kendo.ui.core": {
"deps": [
"angular"
]
}
}
...
map: {
"kendo-ui": "github:kendo-labs/bower-kendo-ui@2016.1.125",
"kendo.ui.core": "github:kendo-labs/bower-kendo-ui@2016.1.125/src/js/kendo.ui.core"
}
查看 kendo.ui.core
源代码并尝试对其进行调试后,我发现他们的 "kendo.ui.core"
AMD 模块已定义,但代码从未要求。因此,所有按 "kendo.ui.core"
AMD 模块分组的模块从未被加载。
这就是手动将 "kendo.ui.core"
添加到 meta
和 map
并强制 "kendo-ui"
依赖于 "kendo.ui.core"
...[= 的原因21=]
我仍然认为这不是最终的解决方案。 I've already posted an issue on Kendo UI GitHub repository 让事情朝着正确的方向前进。
我正在尝试加载 Kendo UI All 与 Angular 的集成,以便能够使用其内置的 UI 小部件指令。
我使用以下命令安装了软件包:jspm install kendo-ui
在某些文件中,我正在导入 jQuery、Angular 和 Kendo UI:
import jquery from "jquery";
import ng from "angular";
import kendoUi from "kendo-ui";
angular.module("common", [
"kendo.directives"
]);
我的 config.js
看起来如下:
...
map: {
"kendo-ui": "github:kendo-labs/bower-kendo-ui@2016.1.125"
}
...
...当我加载应用程序时,我收到了整个 "Failed to instantiate module kendo.directives"
错误消息。
似乎 Kendo UI 核心代码在 Angular 出现之前执行,或者我认为是这样,因为 Kendo UI 的文档状态:
To activate the Angular bindings, load angular.js before you load Kendo UI. Therefore, load the scripts in the order shown below.
此外,我尝试通过添加 meta
属性 到 config.js:
meta: {
'kendo-angular': {
exports: 'kendo',
deps: [
"jquery",
"angular",
"kendo-ui"
]
}
}
...以及 map
的条目:
"kendo-angular": "github:kendo-labs/bower-kendo-ui@2016.1.125/js/kendo.angular.min"
现在似乎已加载 kendo.angular.min.js
,但它会抛出以下错误消息:"Cannot read property 'jQuery' of undefined"
...
更新
问题似乎根本不是加载顺序:没有使用我昨天做的试错(关于 map
和 meta
的事情),错误 "Failed to instantiate module kendo.directives"
不应该发生,因为包正在加载 kendo.ui.core
,其中已经包含模块 kendo.directives
.
另一方面,我试图在所谓文件的未缩小版本上放置断点,结果是定义 Angular kendo.directives
模块的代码永远不会执行,但是源代码的其他部分,当我设置断点时,它被命中并且 Angular 出现在全局范围内。
最后我设法解决了这个问题。
在config.js
:
...
meta: {
"kendo-ui": {
deps: ["kendo.ui.core"]
},
"kendo.ui.core": {
"deps": [
"angular"
]
}
}
...
map: {
"kendo-ui": "github:kendo-labs/bower-kendo-ui@2016.1.125",
"kendo.ui.core": "github:kendo-labs/bower-kendo-ui@2016.1.125/src/js/kendo.ui.core"
}
查看 kendo.ui.core
源代码并尝试对其进行调试后,我发现他们的 "kendo.ui.core"
AMD 模块已定义,但代码从未要求。因此,所有按 "kendo.ui.core"
AMD 模块分组的模块从未被加载。
这就是手动将 "kendo.ui.core"
添加到 meta
和 map
并强制 "kendo-ui"
依赖于 "kendo.ui.core"
...[= 的原因21=]
我仍然认为这不是最终的解决方案。 I've already posted an issue on Kendo UI GitHub repository 让事情朝着正确的方向前进。