我怎样才能解决这个AMD路径冲突?(How can I fix this AMD path conf

2019-07-21 12:06发布

我试图使用ESRI的ArgGis的JavaScript API ,这是由加载道场 ,使用dojo.require 。 我有一个现有的模块化AMD / requirejs打字稿,我需要这个代码集成到应用程序。 在我最初的TS文件的顶部,我输入几个模块:

import tracer = module('../classes/trace');
import pubsub = module('../classes/pubsub');
import masker = module('../classes/masker');
// etc.

这是工作的罚款,但现在我已经加入ArcGIS的代码,而不是我的应用程序内解决相对路径,require.js回升从ESRI的网站的baseUrl,并尝试加载:

http://serverapi.arcgisonline.com/jsapi/arcgis/3.3/js/esri/classes/trace.js
// etc.

造成404个响应和脚本错误的字符串。

我怎样才能解决这个问题?

我试着加载,加载模块的头文件之前设置在我的HTML文件的头部requirejs的baseUrl:

 <script src="http://serverapi.arcgisonline.com/jsapi/arcgis/3.3"></script>
 <script type="text/javascript" src="/content/client/libs/require.js"></script> <!-- data-main="/content/client/hop/hop.app" -->
 <script type="text/ecmascript">
        require.config({
            baseUrl: "/Content/client/hop/"
        });
 </script>
 <script src="~/Content/client/hop/hop.app.js"></script>

但这种失败,投掷要求没有方法配置一个例外。

(注:如果我扭转在HTML文档的头部顺序,以便在ArcGIS API装载序列中的最后出现,然后我得到了相反的问题 - 我的本地文件都做工精细,但Dojo和映射API失败,因为他们正在寻找相对于我的网站路径时,他们应该在argis服务器上搜索)。

Answer 1:

我与ESRI公司的ArcGIS API工作,所以我碰到的这个确切的问题。 这从道场的博客文章帮了我一些。

第一个问题是,道场没有配置相同的方式requirejs的。 它看起来对以前定义的dojoConfig设置的东西了。 第二是ESRI的模块加载设置完毕假设一个基本路径,而你的代码会想其他。 你会需要一个道场的配置看起来是这样的:

dojoConfig = {
    baseUrl: location.pathname.replace(/\/[^/]+$/, '') + '/Content/client/hop/',  // magic!
    packages: [
        {
            name: 'dojo',
            location: "http://serverapi.arcgisonline.com/jsapi/arcgis/3.3compact/js/dojo/dojo/"
        },
        {
            name: 'dojox',
            location: "http://serverapi.arcgisonline.com/jsapi/arcgis/3.3compact/js/dojo/dojox"
        },
        {
            name: 'esri',
            location: "http://serverapi.arcgisonline.com/jsapi/arcgis/3.3compact/js/esri"
        }
    ]
};

这是什么东西做的是设置基本路径返回到当前的URL加上你的额外的东西,然后告诉道场其中ESRI的东西。 这些是我碰到的所有软件包,但如果有一个依赖我错过了,因为它只是从来没有加载对我来说,它需要一个类似的条目。

你可能会遇到的另一个问题是,如果你已经习惯了在本地加载脚本文件如://现在从另一个域Dojo是要尝试访问文件://和浏览器即将关闭该降权。 你需要从现在开始测试一个本地的HTTP服务器上。 在Windows中,我更喜欢HFS和Linux上的蟒蛇很容易 。

我希望这有帮助。



Answer 2:

我已经使用Dojo和因的requirejs在一起的几个问题require()两者之间的冲突。 你应该看看道场错误15616 。 你可能想看看这个线程从谷歌团中,詹姆斯建议所有道场或全部requirejs。

我不知道你用的是什么版本的Dojo,但是从源头检查出因为有相关requirejs /道场不在公布的1.8修改建议。

如果你的唯一的问题是造成的baseUrl冲突的解决方法是创建一个404错误.d.ts该别名路径,如文件../classes/trace ,并与工作的路径(绝对或以其他方式)来替换它。



文章来源: How can I fix this AMD path conflict?