【问题标题】:RequireJS absolute path produces Script ErrorRequireJS绝对路径产生脚本错误
【发布时间】:2018-04-05 10:52:30
【问题描述】:

我有一个简单的文件,我正在使用 define 使用 requireJS 加载依赖项:

define([
    "dojo/_base/declare",
    "dojo/aspect",
    "local/path/to/myFile"
], function(
    declare,
    aspect,
    myFile
) { ...

这可以正常工作,文件映射到 requireJS 配置中。

但是,如果我尝试使用绝对路径(完全相同的文件)访问其中一个文件:

define([
    "dojo/_base/declare",
    "dojo/aspect",
    "https://blah.com/absolute/path/to/myFile.js"
], function(
    declare,
    aspect,
    myFile
) { ... 

我收到以下错误:

"message": "错误:\"https://blah.com/absolute/path/to/myFile.js\" 的脚本错误,需要:/home/test_vds_jasmine/test/modules/myFile-spec4.js\nhttp://requirejs.org/docs/errors .html#scripterror\nat /home/node_modules/requirejs/require.js:168:17\n\nmakeError@/home/node_modules/requirejs/require.js:168:17\nnewContext/context.onScriptError@/home/node_modules /requirejs/require.js:1738:36\n"

我尝试了各种绝对路径,包括有和没有https,有和没有.js 扩展,但我画的是空白,错误消息根本没有帮助。

我是否以错误的方式调用绝对路径?有没有人有这样做的经验?

我必须使用绝对路径调用某些文件是有正当理由的,否则我只会在本地调用所有文件。

【问题讨论】:

  • 谢谢@TarunLalwani 会尝试这些,以为我已经用尽了一切,但shim 方法很有趣
  • @DarrenSweeney 加载该文件的网络请求的结果是什么?在调试器中,检查响应的 HTTP 状态和实际传输的内容(可能与您期望的内容不同)。如果网络请求失败或者你得到了错误的内容,那么 RequireJS 无法解决这个问题,问题就出在其他地方。
  • @DarrenSweeney 向我们展示了已加载文件的定义语句 - 以及实际异常的消息 - 您的设置中是否还有任何 baseUrl/路径定义?如果通过 https 加载,它们的应用会有所不同......因此依赖关系将使用不同的策略来解决。
  • @DarrenSweeney,我发布的链接的任何更新,是否有帮助?

标签: javascript requirejs amd


【解决方案1】:

试试这个,把你的 URL 像这样放在你的 requirejs 配置中:

requirejs.config({
        paths: { 'myFileRemote': 'https://blah.com/absolute/path/to/myFile.js' }
    });

现在用上面的映射更新你的文件:

define([
    "dojo/_base/declare",
    "dojo/aspect",
    "myFileRemote"
], function(
    declare,
    aspect,
    myFile
) { ... 

【讨论】:

    【解决方案2】:

    建议的解决方案

    您的myFile.js 应该有一个可以这样使用的定义块。使用定义结构升级您的myFile.js

    myFile.js:

    define(["./cart", "./cart2"], function(cart, cart2) {
        return {
            color: cart.color,
            size: "large",
            addToCart: function() {
            }
        }
    });
    

    替代解决方案

    如果您无法将myFile.js 修改为该结构,只需将其添加到requirejspath 配置中,就像添加jQuery 一样。您可以在myFile.jsapp.js 的顶部添加配置(您正在调用myFile.js 的文件)。如果你将配置添加到app.js,你可以从任何地方访问它。

    myFile.js/app.js:

    require.config({
        paths: {
            "myFile": "https://blah.com/absolute/path/to/myFile"
        }
    });
    

    那么你可以如下使用它:

    myFile.js:

    define([
        "dojo/_base/declare",
        "dojo/aspect",
        "myFile"
    ], function(
        declare,
        aspect,
        myFile
    ) { ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-18
      • 2013-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-09
      • 1970-01-01
      相关资源
      最近更新 更多