为什么require.js会忽略config baseUrl和paths

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么require.js会忽略config baseUrl和paths相关的知识,希望对你有一定的参考价值。

我遇到一个问题,几乎完全相同的require.js配置调用似乎工作方式不同,在一种情况下无法设置baseUrlpath

文件夹结构

 - /js
 - - app/
 - - libs/
 - - - hogan.js
 - - - backbone
 - - - - backbone.js
 - - - - etc.
 - - - boostrap
 - - - jquery
 - - - - jquery.js
 - - - - etc.
 - - - require
 - - - - require.js
 - - - - etc.
 - - templates/
 - - require.config.js

脚本标记

<script data-main="/resources/js/require.config" src="/resources/js/libs/require/require.js"></script>

需要配置

require.config(
    {
        baseUrl: "/resources/js/libs",
        shim: {
            "underscore": {
                exports: "_"
            },
            "backbone": {
                deps: [
                    "json2",
                    "underscore",
                    "jquery"
                ],
                exports: "Backbone"
            }
        },
        paths: {
            "app": "/resources/js/app",
            "backbone": "backbone/backbone",
            "jquery": "jquery/jquery",
            "templates": "/resources/js/templates",
            "templateEngine": "hogan"
        }
    }
);

require(
    [
        "app/router"
    ],
    function( AppRouter ){
        AppRouter.execute();
    } 
);

在这两种情况下,附加一个脚本标记,显示require.config.js的完整内容,从以下开始:

<script type="text/javascript" charset="utf-8" data-requirecontext="_" data-requiremodule="require.config" src="/resources/js/require.config.js">

在app / router中定义

define(
    [
        'backbone',
        'templateEngine'
    ],
// etc
);

但是,如果出现问题,app / router永远不会加载,只有以下(没有404,没有):

GET require.js 200 OK 180ms     
GET require.config.js 200 OK 69ms

如果我将require(["app/router"]);输入Firebug控制台,我会得到以下信息:

"NetworkError: 404 Not Found - /resources/js/backbone.js
"NetworkError: 404 Not Found - /resources/js/templateEngine.js"

我期望看到的是:

  • /resources/就是/礼拜四/backbone/backbone.就是
  • /resources/就是/礼拜四/hogan.就是

尝试解决方案

  • 我试图使用baseUrlpaths的相对路径和绝对路径的各种组合。例如baseUrl: libspaths: { "app" : "../app" }等。
  • 我尝试了depscallback,而不是使用require以下的config
  • 我添加了属性context,匹配baseUrl
  • 我已将require.config.js移动到libs目录中(根据需要编辑baseUrlpaths;仍然会遇到相同的忽略配置问题,例如,它只会尝试加载/resources/js/libs/backbone.js)。

注意

此文件夹结构和配置文件可以在我的localhost上运行,我从中删除/ resources /,如上所示。相反,所有相对路径(没有以/开头)用于baseUrlpaths。但在实际的服务器上不是一个选项。

答案

解决方案是没有任何。 (句点)配置文件的文件名。将文件重命名为require-config.js后,一切都按预期工作。其他文件很好用名称中的点,而不是主配置文件。

以上是关于为什么require.js会忽略config baseUrl和paths的主要内容,如果未能解决你的问题,请参考以下文章

带有 require.js 的 Knockout.js 映射插件

为啥定义 RUSTFLAGS 会导致 .cargo/config 中的 rustflags 被忽略?

覆盖 require.js 中的 setTimeout

require.js 同步加载

require 模块化

使用require.js发出加载chart.js缩放插件的问题