【问题标题】:Typescript import using path from some root使用来自某个根目录的路径导入打字稿
【发布时间】:2015-11-18 09:26:39
【问题描述】:

有没有什么简单的设置方法可以让我从某个根点开始import

例如:

- module1
   \- file1.ts
- module2
   \- file2.ts

在file2中我想importfile1

import { foo } from '../module1/file1'

我想做的是:

import { foo } from 'src/module1/file1'

Angular2 以某种方式使用它(参见https://github.com/angular/angular/blob/master/modules/angular2/src/core/compiler/compiler.ts)。我查看了他们的构建过程,但它太复杂了,我不确定他们是如何启用它的。

【问题讨论】:

    标签: typescript angular


    【解决方案1】:

    所有 ES6 导入都是相对的,angular2 使用 systemjs 处理所有导入/导出。在 systemjs 配置中,您可以定义一个地图。 (我不会去那里)

    你必须记住 ES6 中的导入只是加载 javascript 文件,所以如果 src 是你的根目录,你应该可以只从 /src/module1/files 导入

    【讨论】:

    • 我的应用其实是一个node应用,所以typescript被转译成ES5和require。我认为你不能使用 require 从 root 导入,除非你以某种方式破解它或强制编译器为你生成正确的相对路径。
    【解决方案2】:

    https://www.npmjs.com/package/app-module-path 似乎是 node 的最佳解决方案。

    更新:

    我是这样用的

    root
      \- module1
      |  \- file1.ts
      \- module2
      |  \- file2.ts
      \- main.ts
    

    main.ts 是应用程序的入口点,前两行如下:

    import * as path from 'path';
    
    require('app-module-path').addPath(path.resolve(__dirname, '..'));
    

    然后从module2/file2.ts 我可以这样做:

    import { Stuff } from 'root/module1/file1';
    

    【讨论】:

    • 您是否设法让app-module-path 工作?因为它不适合我使用它。
    • 是的,请参阅更新的答案。这适用于我运行的任何版本的节点。
    • 非常感谢,我试试看:))
    【解决方案3】:

    我正在使用 Angular CLI 及其生成的标准结构。

    所以我使用的所有东西都在src/app

    我的主要 HTTP 服务位于 src/app/services/httpService.ts

    要导入我使用的此服务:

    import { HttpService } from 'app/services/httpService'
    

    我不确定这是否依赖于 Angular CLI 所做的任何特殊配置(我意识到在发布此问题时 Angular CLI 还不存在),但在您的环境中值得一试。

    【讨论】:

    • 这是 typescript 编译器的一个特性,自从这个问题以来已经改进了很多,还有一个设置可以配置自定义路径(typescriptlang.org/docs/handbook/module-resolution.html)。节点和浏览器模块分辨率之间也存在(或曾经存在)一些差异。
    猜你喜欢
    • 2018-05-28
    • 2017-11-14
    • 2022-11-05
    • 2019-06-14
    • 2017-03-13
    • 2021-05-03
    • 2021-11-29
    • 2017-05-17
    • 2022-11-10
    相关资源
    最近更新 更多