Angular 2你可以从项目根目录导入一些东西,而不必使用../

时间:2016-10-19 08:15:37

标签: angular typescript import

我发现我正在慢慢地挖掘自​​己的坟墓,因为我的文件夹结构越深入,每次我需要从我的根组件导入模块时,我必须走得越远:

import {ComponentsModule, SharedModule} from '../../../../../../shared';

由于该视图也有子视图,因此它会变得更长。

我查看了this question,这表明目前使用Angular 2是不可能的。然而,对我来说似乎很奇怪,没有办法实现这样的事情:

import {ComponentsModule, SharedModule} from 'src/app/shared';

这是将来会出现的功能还是已经可以用某种方式实现?

编辑:根据@ Sasxa的建议,我这样做了:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "*": [
        "*"
      ]
    },
    "declaration": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "lib": ["es6", "dom"],
    "mapRoot": "./",
    "module": "es6",
    "moduleResolution": "node",
    "outDir": "../dist/out-tsc",
    "sourceMap": true,
    "target": "es5",
    "typeRoots": [
      "../node_modules/@types"
    ]
  }
}

但是现在当我尝试启动Angular CLI时,我遇到了一大堆错误,主要是错误:ERROR in Entry module not found: Error: Recursion in resolvingERROR in multi main Module not found: Error: Recursion in resolving

缺少什么?

1 个答案:

答案 0 :(得分:2)

似乎可以使用paths中的baseUrltsconfig.json编译器选项来完成此操作。 https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping

以下是文档中的示例:

{
    "compilerOptions": {
        "baseUrl": ".",
        "paths": {
            "*": [
                    "*",
                    "generated/*"
                ]
            }
    }
}
  

这告诉编译器任何与模式匹配的模块导入" *" (即所有值),查看两个位置:

     
      
  • " *":意思是同一个名字不变,所以map => \
  •   
  • "生成*"意思是模块名称带有附加前缀“generated”,所以map => \生成\
  •   

应该在TypeScript 1.9 +

中可用

更新

我刚尝试过:添加"baseUrl": "."允许我在我的应用中的任何位置import {...} from 'app/shared'(我的tsconfig.json位于src\文件夹中)。编译没有任何错误,并与Angular CLI一起使用。