我的项目结构如下所示
root/
lib/
js/
在我的js文件夹中,我有一个require-config文件,它引用lib目录中的javascript文件。像这样:
require.config({
paths: {
jquery: ["../lib/jquery/dist/jquery"],
}
});
在视图中启动如下:
<script data-main="js/require-config" src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.1/require.min.js"></script>
<script>require(["viewModels/searchViewModel"]);</script>
这就是我的searchViewModel的样子(在函数内省略了代码),从typescript生成:
define(["require", "exports", "jquery"], function (require, exports, $) {
"use strict";
var SearchViewModel = (function () {
function SearchViewModel() {
}
return SearchViewModel;
}
});
在大多数情况下,找到正确的文件似乎没有问题。有时,它会在/js/jquery.js中查找jquery文件,这会导致浏览器为http://localhost/js/jquery.js抛出404。
我在require配置中做错了吗?为什么它有时会起作用,有时候不起作用?
答案 0 :(得分:1)
请勿使用data-main
加载RequireJS配置。它间歇工作的原因是因为data-main
导致RequireJS异步加载命名脚本 。因此,在require(["viewModels/searchViewModel"]);
执行时,您的配置不一定已加载。
仅当所有依赖于此配置的代码通过传递给data-main
的同一文件加载时,使用data-main
加载配置才是安全的。这可能是因为您构建了一个捆绑包,其中包含应用程序的所有模块以及配置,或者因为您在配置中仅使用deps
来加载配置后加载模块。
您的情况不安全,因为您在data-main
加载的模块 之外的代码依赖于正在加载的配置。
将script
拆分为:
<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.1/require.min.js"></script>
<script src="js/require-config.js"></script>