我正在构建一个不会存在于网站根目录的Aurelia应用程序。它的URL将是这样的http://mycompany.com/neatoApp。
我有一个看起来像这样的路线配置
{route:['','index'], name:'index',moduleId:'index' nave:true, title: 'neato app home'},
{route:['news'], name:'news',moduleId:'news' nave:true, title: 'neato app news'}
我已经配置了System.js,以便它知道/ neatoApp是baseURL并且它正确地下载了所有脚本和事物。
我的app html头部有一个<base href="/neatoApp" />
元素,我使用pushState进行路由。
问题是当我导航到mycompany.com/neatoApp Aurelia报告&#39;未找到路线时:/ neatoApp&#39;
路由器有一个baseUrl属性,看起来我设置它的值并不重要,因为路由识别器不能使用它。
我真的不想将neatoApp放在我的所有路线中,原因有几个:当应用程序部署在各个地方(开发,测试等)时,基本路径会发生变化,这让人头疼。开发人员没有责任知道应用程序将在各种环境中部署的位置,而且在部署代码时更新代码以包含该基本URL的操作人员并不负责。当我在路由配置中包含neatoApp时,它使得导航行为奇怪,就像生成指向/ neatoApp / neatoApp的链接一样。
有没有人能解决这个问题?
我创建了一个用于演示此问题的plunker:http://plnkr.co/edit/HPEzClAlncvQkSzjw6ph?p=preview
答案 0 :(得分:0)
检查这个plunker,看看需要做什么:
http://plnkr.co/edit/0j6vhbTf4LZw4vOLOUka?p=preview
当你在虚拟目录中执行类似于http://mywebsite/subfolder的虚拟目录时,你想在路由,样式表和config.js中的baseURL前面加上&#34; ./" ;例如:
while (*traverse)
index.html通常如下所示:
baseURL: "./"
与app.js相同,应该如下所示:
<script src="./jspm_packages/system.js"></script>
<script src="config.js"></script>
如果您要发布到网站的根目录,那么您可以删除&#34; ./"并且只需使用&#34; /&#34;虽然从技术上讲,你可以使用&#34; ./"离开路线;只需更改baseURL,它仍然可以工作。
答案 1 :(得分:0)
对于我的MVC 5应用程序,我在我的Index.cshtml中使用它:
<script src="~/jspm_packages/system.js"></script>
<script>
System.config({ baseURL: "@Url.Content("~/")" });
</script>
<script src="~/config.js"></script>
<script>
System.import('aurelia-bootstrapper');
</script>
并在config.js中注释掉了baseUrl。需要在第一次调用System.config()时设置BaseUrl。
System.config({
//baseURL: "./",
defaultJSExtensions: true,
...