gpt4 book ai didi

angular - 禁止在 Nrwl Nx 中的同一库中导入桶文件

转载 作者:行者123 更新时间:2023-12-02 18:29:55 29 4
gpt4 key购买 nike

假设我们在 Nrwl Nx 有一个应用程序和一个库.

/apps
/myApp

/libs
/myLib
/components
/my.component.ts
/other.component.ts
/index.ts

我已经在nx.json中设置了标签和nx-enforce-module-boundaries阻止将应用程序导入库内的规则。它有效,这部分很好。

我想做的另一件事是在库中强制使用桶文件。所以我在tsconfig.ts中创建了一条路径

"paths": {
"@myNs/my-lib": ["libs/myLib/index.ts"]
}

我遇到了这个问题。假设我们有从 index.ts 导出的东西.

// index.ts
export { MyComponent } from './components/my.component';

现在,如果我们使用一些自动导入 IDE 功能(例如来自 WebStormVS Code )。他们将导入MyComponent使用路径@myNs/my-lib - 这是预期的,因为我刚刚像这样配置了它。

当我想自动导入 myLib 中的内容时,出现了一个真正的问题(这些导入应该是相对的,而不是 @myNs/my-lib ) - 根据逻辑和本文( [Interesting article here] ):

Never let a lib import from its own Barrel file

The TypeScript modules within a particular lib should not care what functionality that lib exposes, so it shouldn’t use its own barrel file at any point.

If a module imports something from its own barrel file, it almost always results in circular reference errors. Therefore, imports from inside of the module should use relative path imports.

所以我找到了一种解决方法来阻止 lib 内的类似 TS 路径的导入。我在libs/myLib/tslint.json里面添加了一条规则:

"rules": {
"import-blacklist": [true, "@myNs/my-lib"]
}

无论如何,它并没有修复自动导入功能,只是不允许在库内使用错误的导入。

另一个问题是仍然允许错误的导入。假设OtherComponent想要进口MyComponent那么有三种可能:

import { MyComponent } from './my.component'; // the correct way
import { MyComponent } from '.'; // not the best, but also the correct way
import { MyComponent } from '..'; // using barrel file - not correct (look at the citation above), but still successfuly validated by TSLint

问题:

  1. 如何禁止同一库内导入桶文件?
  2. 如何将 IDE 配置为在 lib 内部具有相对路径,在外部 ( @myNs/my-lib ) 具有 TypeScript 路径?

最佳答案

这是 IntelliJ 中的设置。我在 v2020.1 中看到此功能正常工作。

setting in IntelliJ under Editor > Code Style > Typescript named "Use path mappings from tsconfig.json set to "Only in files outside specified paths"

我喜欢 @Nickson 创建的规则,并且认为添加规则以防止错误是个好主意!

关于angular - 禁止在 Nrwl Nx 中的同一库中导入桶文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60190917/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com