RequireJS 有时无法加载 jQuery
RequireJS sometimes fails to load jQuery
我的项目结构是这样的
root/
lib/
js/
在我的 js 文件夹中,我有一个 require-config 文件,它引用了 lib 目录中的 javascript-files。像这样:
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 的样子(省略了函数内的代码),从打字稿生成:
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 配置中做错了什么吗?为什么有时有效有时无效?
不要使用 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>
我的项目结构是这样的
root/
lib/
js/
在我的 js 文件夹中,我有一个 require-config 文件,它引用了 lib 目录中的 javascript-files。像这样:
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 的样子(省略了函数内的代码),从打字稿生成:
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 配置中做错了什么吗?为什么有时有效有时无效?
不要使用 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>