【问题标题】:RequireJS sometimes fails to load jQueryRequireJS 有时无法加载 jQuery
【发布时间】:2016-09-09 19:02:18
【问题描述】:

我的项目结构是这样的

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 配置中做错了吗?为什么它有时有效,有时无效?

【问题讨论】:

    标签: javascript requirejs


    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 2015-06-26
      • 1970-01-01
      • 2017-11-01
      • 1970-01-01
      • 2013-02-28
      • 2013-09-28
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多