如何配置打字稿,以便它知道"我的SystemJS路径?

时间:2016-09-17 04:37:26

标签: javascript typescript systemjs jspm

目前我必须使用相对路径导入我的模块:

import {UserService} from "../../../services/user-service";

但是,我宁愿配置SystemJS,以便解决方案从应用程序的根开始,除非模块路径以./开头,然后我可以这样做(services位于根目录):

import {UserService} from "services/user-service";

如果我想从当前位置导入文件:

import {Something} from "./something";

我可以使用SystemJS配置第一部分:

System.config({
    defaultJSExtensions: true,
    transpiler: false,
    paths: {
        "*": "dist/*",
        "services": "dist/services/*",
        "models": "dist/models/*",
        "github:*": "jspm_packages/github/*",
        "npm:*": "jspm_packages/npm/*"
    },
    // ...
}

...然而

  1. 我不确定如何让Typescript知道我的SystemJS.paths配置和
  2. 我不知道如何将SystemJS配置为"默认情况下从根目录加载东西"。

1 个答案:

答案 0 :(得分:0)

一种解决方案是在SystemJs中配置包并为typescript添加路径映射。

您可以通过在services目录下添加index.ts文件来完成此操作,如:

export { UserService } from './user-service';
export { OrderService } from './order-service';
...

将以下内容添加到SystemJs配置中(请参阅:SytemJS config-api):

SystemJS.config({
  ...
  packages: {
    "services": {
      "main": "index.ts"
    }
  }
});

将此添加到tsconfig.json(请参阅:Typescript module resolution):

{
  "compilerOptions": {
  {
    ...
    "moduleResolution": "Node",
    "baseUrl": ".",
    "paths": {
      "services": [ "services" ]
    }
  }
}

现在您可以导入如下文件:

import { UserService } from 'services';

这将在Visual Studio中提供intellisense,并允许在浏览器中加载模块。