SystemJS相对路径

D R*_*bio 1 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'
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

只要从根路径加载此文件<script src="/config.js">并且位置为
http://localhost/config.jshttp://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",
  },
Run Code Online (Sandbox Code Playgroud)

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

Ami*_*mid 5

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

为了更容易,您可以使用systemjs baseURL属性.然后,您将不得不在一个地方更改路径,而无需为每个包重写它们.