【问题标题】:How to configure `baseUrl` for typescript compiler?如何为打字稿编译器配置`baseUrl`?
【发布时间】:2017-08-10 09:26:54
【问题描述】:

我有一个使用 requireJS 的模块构建的网站。我想在这个项目上开始使用 TypeScript(1.8,Visual Studio 2015),并尝试重写其中一个模块。

目前我的模块如下所示:

// file: ProjectFoo/app/dashboard/viewProfile.js
define(["services/datasvc"], function (datasvc) {
    datasvc.getData(...).then(...);
});

文件datasvc.js位于以下路径:ProjectFoo/services/datasvc.js

为了让 datasvc.js 可以被 requireJS 访问,我配置了如下路径(requireJS 配置):

services -> ./services

重写我的模块后,我使用以下构造导入datasvc(注意:TypeScript 编译器配置为使用amd 模块结构)。

import * as datasvc from "services/datasvc";

但这不起作用,因为 TypeScript 将 services/datasvc 视为相对于当前文件的路径。但是,如果我按如下方式重写该导入语句,那么 TypeScript [compiler] 会成功:

import * as datasvc from "../../services/datasvc";

但是,这会导致 datasvc 使用相对路径导入,即生成代码类似于:

define(["require", "exports", "../../services/datasvc"]...

这里的问题是我必须更改 ../ 的编号以包含在模块路径中,具体取决于我所在文件的嵌套深度。

问题: 有没有办法使用 import * as datasvc from "services/datasvc" 并以某种方式配置 TypeScript 以与 requireJS 相同的方式处理?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    You'll need typescript 2.0 or above in order to configure a base url.

    如发行说明中所述,然后您可以创建一个包含以下内容的 tsconfig.json 文件:

    {
      "compilerOptions": {
        "baseUrl": "./modules"
      }
    }
    

    现在将在 ./modules/moduleA 中查找对“moduleA”的导入

    import A from "moduleA";
    

    旁注:许多开发人员依赖 gulp 或类似工具来编译 typescript,而不是直接使用 typescript 编译器。如果您依赖这些工具之一,则必须确保您的工具从 tsconfig.json 中获取这些新选项(例如 baseUrl)并将其传递给 typescript 编译器。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-16
    • 2018-12-19
    • 2020-04-07
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 2022-08-20
    • 1970-01-01
    相关资源
    最近更新 更多