使用 ESRI Javascript 4.0 API 和 Require JS

Using ESRI Javascript 4.0 API with Require JS

在将我的应用程序从 4.0 ArcGIS Javascript API 的 Beta 3 版本切换到新版本的 4.0 Javascript 时,我 运行 遇到了一些问题API.

我在使用 4.0 的 beta3 版本时有一个工作图 javascript API 并且配置了 Require JS 以像这样使用 beta3 版本正确加载模块

 requirejs.config({
    baseUrl: "/App/",
    paths: {
        "text": "/Scripts/text",
        "moment": "/Scripts/moment",
        "durandal": "/Scripts/durandal",
        "plugins": "/Scripts/durandal/plugins",
        "transitions": "/Scripts/durandal/transitions",
        "esri": "//js.arcgis.com/4.0beta3/esri",
        "dojo": "//js.arcgis.com/4.0beta3/dojo",
        "dojox": "//js.arcgis.com/4.0beta3/dojox",
        "dijit": "//js.arcgis.com/4.0beta3/dijit",
    },
});

但是一旦我从 4.0beta3 切换到 4.0

requirejs.config({
    baseUrl: "/App/",
    paths: {
        "text": "/Scripts/text",
        "moment": "/Scripts/moment",
        "durandal": "/Scripts/durandal",
        "plugins": "/Scripts/durandal/plugins",
        "transitions": "/Scripts/durandal/transitions",
        "esri": "//js.arcgis.com/4.0/esri",
        "dojo": "//js.arcgis.com/4.0/dojo",
        "dojox": "//js.arcgis.com/4.0/dojox",
        "dijit": "//js.arcgis.com/4.0/dijit",
    },
});

我在尝试加载地图时遇到错误,它正在尝试加载此脚本并给出 404

http://localhost:17654/Scripts/moment/moment.js 

我相信它正在尝试加载此脚本,因为 ESRI Api 使用它自己的时刻插件,并且由于我已经定义了时刻是什么,它试图查看本地主机而不是加载 esri 模块.

我已经尝试了几种不同的配置要求,有了这个我可以让页面加载而没有 javascript 错误但是没有地图显示

requirejs.config({
    baseUrl: "/App/",
    paths: {
        "text": "/Scripts/text",
        "moment": "/Scripts/moment",
        "durandal": "/Scripts/durandal",
        "plugins": "/Scripts/durandal/plugins",
        "transitions": "/Scripts/durandal/transitions",
        "esri": "//js.arcgis.com/4.0/esri",
        "dojo": "//js.arcgis.com/4.0/dojo",
        "dojox": "//js.arcgis.com/4.0/dojox",
        "dijit": "//js.arcgis.com/4.0/dijit",
    },
    map: {
        "*": {
            "moment/moment": "moment"
        }
    }
});

我知道 javascript API 使用它自己的 dojo 版本,它应该处理模块加载,所以将它与 require js 混合使用甚至可能是不可能的,但因为它工作正常对于 beta3,我希望找到一种方法让 this moment 插件正确加载并使用 require js 让地图工作。

有没有人有让这两个一起工作的经验?任何帮助深表感谢。谢谢

我想如果你的文件夹中有 Scripts/moment/moment.js 文件,一切都会很好。

它应该能够与 requirejs 一起工作,但是您使用它而不是 esri 的 AMD 加载器是否有特殊原因,后者随 API 一起出现?使用他们的应该会让事情变得更容易,但你可能会 运行 使用他们的加载程序遇到同样的问题,因为 esri 已经暂时定义了 package/alias 。您可以尝试的一件事是为您的路径命名不同的名称。像这样:

requirejs.config({
  baseUrl: "/App/",
  paths: {
    "text": "/Scripts/text",
    "local-moment": "/Scripts/moment",
    "durandal": "/Scripts/durandal",
    "plugins": "/Scripts/durandal/plugins",
    "transitions": "/Scripts/durandal/transitions",
    "esri": "//js.arcgis.com/4.0/esri",
    "dojo": "//js.arcgis.com/4.0/dojo",
    "dojox": "//js.arcgis.com/4.0/dojox",
    "dijit": "//js.arcgis.com/4.0/dijit",
  },
});

这样 esri 仍然可以要求他们的 moment 而您可以要求您的 local-moment.