RequireJS似乎忽略了我的路径定义(我没有在html中调用require()).为什么

RequireJS seems to be ignoring my path definitions ( I'm not calling require() in the html). Why?

本文关键字:html 调用 为什么 require 我的 我的路 RequireJS 定义 路径      更新时间:2023-09-26

我一直在研究这个问题。我知道一个常见的问题是在定义require之前异步加载引起的。我不认为这是我正在经历的问题。我在配置文件中声明baseURL路径,但我总是得到一个错误,脚本找不到,因为它似乎忽略了我的路径,只是从baseURL看。

这是我的文件夹结构

index.html
js/
  app/
     jsonLoader.js
     notionalAddGraph.js
  lib/
  config.js
  require.js

lib中没有任何内容,但我正在模仿我正在进行的项目的结构。这是该页面的html。

HTML:

<html>
<head>
    <title>Blah Blah Blah</title>
    <script data-main="js/config.js" src="js/require.js"></script>
    <script id="graphData" type="application/json">
    {
      "json": "Is better than",
      "global": "but it requires a change to the authoring",
      "environment": "also, because of the JSON.parse",
      "required": "it is probably slower too"
    }
    </script>
</head>

下面是config.js的代码

config.js:

require({
    baseUrl: 'js/lib',
    paths: {
      app: '../app'
    },
    urlArgs: 'bust=' + (new Date()).getTime()
});
require(['app/jsonLoader','app/notionalAddGraph'],
    function(require) {
      'use strict';
});
这里是jsonLoader.js的代码

jsonLoader.js:

define(function() {
  var jsonString = document.getElementById('graphData').textContent;
  return JSON.parse(jsonString);
})

下面是notionalAddGraph.js的代码

notionalAddGraph.js:

define([
  'jsonLoader'
], function(json) {
  console.log(json.required);
});

所以每次我尝试这个,require尝试加载js/lib/jsonloader.js并失败,因为它应该在app下查找,而不是lib。奇怪的是,如果我在定义app时故意指定了不正确的路径,requireJS至少会在我告诉它的地方寻找jsonLoader。很明显,它不在这里,因为我指定了错误的路径。当我指定正确的路径时,它不起作用,并尝试从baseURL加载。我试过改变我能想象的config.js的一切,但似乎没有什么工作。我已经直接从requireJS API复制了格式,但仍然没有。有人知道我可能做错了什么吗?

在notionalAddGraph.js中,你已经定义了'jsonLoader',所以它在正确的路径中寻找,将../添加到你的定义中,应该可以正常工作

我想试试

首先,使用绝对路径调用脚本(您可以稍后回滚此更改,但这只是为了安全起见)

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

第二步,使用requirejs.config声明配置参数。我猜你现在做的这些只是变量。

requirejs.config({
    baseUrl: 'js/lib',
    paths: {
      app: '../app'
    },
    urlArgs: 'bust=' + (new Date()).getTime()
});

第三,jsonLoader返回的不是require对象,而是来自解析jsonString的对象。你现在所做的是替换require对象。

require(['app/jsonLoader','app/notionalAddGraph'],  function(jsonObject) {
      'use strict';
    console.log('require is still', require, 'and jsonobject is ',jsonObject);
});