SystemJS 相对路径

SystemJS relative paths

我有一个非常基本的 config.js 文件,只要它部署在根 URL 下,它就能按预期工作。这是示例 config.js 文件:

System.config({
  //use typescript for compilation
  transpiler: 'typescript',
  //typescript compiler options
  typescriptOptions: {
    emitDecoratorMetadata: true
  },
  //map tells the System loader where to look for things
  map: {
      app: "./src",
  },
  //packages defines our app package
  packages: {
    app: {
      main: './app.ts',
      defaultExtension: 'ts'
    }
  }
});

只要这个文件是从根路径<script src="/config.js">加载并且位置是
http://localhost/config.js and http://localhost/src/app.ts 一切正常。

我现在正在尝试将 config.js 文件移动到更深的目录并像这样加载它:<script src="/a/b/c/d/e/config.js">,但是如果我这样做,我需要对路径进行硬编码config.js 文件本身如:

 //map tells the System loader where to look for things
  map: {
      app: "./a/b/c/d/e/src",
  },

是否可以不在 config.js 文件中再次对整个路径进行硬编码?我原以为领先的 ./ 意味着 "relative to" 但事实并非如此。如果我不再次对完整路径进行硬编码,它就不起作用。什么是(或是否存在)指示相对位置的语法?

'./' 的意思是相对的,但它是相对于加载 js 文件的 'context' 的。我假设您将它加载到位于根文件夹中的 index.html 之类的页面中 - 即您的 'context' 并且所有路径都将相对于它。因此,通过将 config.js 移动到任何其他非根位置,然后将其加载到根 html 页面中 - 不会更改其仍将是根文件夹的上下文,而 src 文件的位置已更改并且现在您被迫在 config.js 中为他们提供新路径。

为了更简单,您可以使用 systemjs baseURL 属性。然后你将只需要在一个地方更改路径,而无需为每个包重写它们。