RequireJS有时无法加载jQuery

时间:2016-09-09 09:40:58

标签: javascript requirejs

我的项目结构如下所示

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配置中做错了吗?为什么它有时会起作用,有时候不起作用?

1 个答案:

答案 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>