![](/img/trans.png)
[英]How to share library within other library nx (nrwl) - singlerepo
[英]Disallow barrel file imports within the same library in Nrwl Nx
假设我们在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 功能(例如来自WebStorm
或VS Code
)。 他们将使用路径@myNs/my-lib
导入MyComponent
- 这是意料之中的,因为我刚刚像这样配置了它。
当我想里面的东西AUTOIMPORT出现一个现实的问题myLib
(这些进口应该是相对的,不是@myNs/my-lib
) -根据逻辑和这篇文章( [有趣的文章,在这里] ):
永远不要让 lib 从它自己的 Barrel 文件中导入
特定库中的 TypeScript 模块不应该关心该库公开什么功能,因此它在任何时候都不应该使用自己的桶文件。
如果一个模块从它自己的桶文件中导入一些东西,它几乎总是会导致循环引用错误。 因此,从模块内部导入应该使用相对路径导入。
所以我找到了一种解决方法来阻止 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
问题:
@myNs/my-lib
)?没有人回答,所以我决定创建一个简单的TSLint
规则来处理这种情况: import-blacklist-extended
规则在Nrwl
monorepo 中Nrwl
良好,但它可以优化并且某些机制可以更好地解决。 如果您需要任何更改,请随时在 Github 上创建问题和 PR。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.