0

我正在构建一个不会位于网站根目录的 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 并正确下载所有脚本和内容。我的应用程序 html 的头部有一个<base href="/neatoApp" />元素,我正在使用 pushState 进行路由。

问题是当我导航到 mycompany.com/neatoApp Aurelia 报告“找不到路由:/neatoApp”

Router 有一个 baseUrl 属性,它似乎与我设置它的值无关,因为路由识别器不使用它。

我真的不想在我的所有路由中都放置neatoApp,原因有几个:随着应用程序部署在不同的地方(开发、测试等),基本路径会发生变化,这使得维护起来很头疼。了解应用程序将在各种环境中部署的位置不是开发人员的责任,也不是运维人员在部署时更新代码以包含该基本 URL 的责任。当我在路由配置中包含neatoApp 时,它会使导航行为奇怪,就像生成指向/neatoApp/neatoApp 的链接一样。

有人有解决这个问题的方法吗?

我创建了一个 plunker 来演示这个问题:http ://plnkr.co/edit/HPEzClAlncvQkSzjw6ph?p=preview

4

2 回答 2

0

看看这个 plunker 看看需要做什么:

http://plnkr.co/edit/0j6vhbTf4LZw4vOLOUka?p=preview

当你在做一个虚拟目录之类的事情时,你的网站看起来像这个http://mywebsite/subfolder你想在你的路由、样式表和 config.js 中的 baseURL 前面加上“./”,例如:

baseURL: "./"

index.html 通常看起来像这样:

<script src="./jspm_packages/system.js"></script>
<script src="config.js"></script>

与 app.js 相同,应该如下所示:

  { route: "", moduleId: "./src/routes/home", title: "Home", nav: true, name:"home" },

如果您要发布到网站的根目录,那么您可以删除“./”并只使用“/”,尽管从技术上讲,您可以使用“./”保留路由并只需更改 baseURL,它仍然可以工作。

于 2016-05-31T08:04:51.933 回答
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。BaseUrl 需要在第一次调用 System.config() 时设置。

System.config({
  //baseURL: "./",
  defaultJSExtensions: true,
  ...
于 2016-11-10T10:33:01.183 回答