SystemJS相对路径

时间:2016-03-18 19:01:10

标签: javascript typescript systemjs

我有一个非常基本的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.jshttp://localhost/src/app.ts一切正常。

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

config.js

是否有可能不再在 //map tells the System loader where to look for things map: { app: "./a/b/c/d/e/src", }, 文件中对整个路径进行硬编码?我本以为领先的config.js意味着“相对于”,但事实并非如此。如果我不再对全路径进行硬编码,则它不起作用。什么是(或存在)指示相对位置的语法?

1 个答案:

答案 0 :(得分:5)

&#39; ./&# 39;确实是指亲戚,但它与“背景”有关。你加载js文件的地方。我假设您将其加载到位于根文件夹中的index.html之类的页面中 - 这是您的上下文&#39;并且所有路径都将相对于它。因此,通过将config.js移动到任何其他非root位置,然后将其加载到根html页面 - 不会更改其仍将是根文件夹的上下文,而src文件的位置已更改,现在您被迫提供config.js中新的路径。

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