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>