Nic*_*kon 4 webstorm tslint visual-studio-code angular nrwl
假设我们有一个应用程序和一个库Nrwl Nx。
/apps\n /myApp\n\n/libs\n /myLib\n /components\n /my.component.ts\n /other.component.ts\n /index.ts\nRun Code Online (Sandbox Code Playgroud)\n\n我已经设置了标签nx.json和nx-enforce-module-boundaries规则来阻止在库中导入应用程序。它有效,这部分很好。
我想做的另一件事是强制在库中使用桶文件。所以我创建了一条路径tsconfig.ts
"paths": {\n "@myNs/my-lib": ["libs/myLib/index.ts"]\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我遇到了这个问题。假设我们有从 导出的东西index.ts。
// index.ts\nexport { MyComponent } from \'./components/my.component\';\nRun Code Online (Sandbox Code Playgroud)\n\n现在,如果我们使用一些自动导入 IDE 功能(例如 fromWebStorm或VS Code)。他们将MyComponent使用路径导入@myNs/my-lib- 这是预期的,因为我刚刚像这样配置了它。
当我想自动导入里面的东西时,一个真正的问题出现了myLib(这些导入应该是相对的,而不是@myNs/my-lib) - 根据逻辑和这篇文章([这里有趣的文章]):
\n\n\n永远不要让 lib 从它自己的 Barrel 文件导入
\n\n特定库中的 TypeScript 模块不应该关心该库公开的功能,因此它不应该在任何时候使用自己的 Barrel 文件。
\n\n如果模块从其自己的桶文件中导入某些内容,则几乎总是会导致循环引用错误。因此,从模块内部的导入应使用相对路径导入。
\n
所以我找到了一种解决方法来阻止 lib 内类似 TS 路径的导入。我在里面添加了一条规则libs/myLib/tslint.json:
"rules": {\n "import-blacklist": [true, "@myNs/my-lib"]\n}\nRun Code Online (Sandbox Code Playgroud)\n\n无论如何,它并没有修复自动导入功能,只是不允许在库内使用错误的导入。
\n\n另一个问题是仍然允许错误的导入。\n假设OtherComponent要导入MyComponent那么有三种可能:
/apps\n /myApp\n\n/libs\n /myLib\n /components\n /my.component.ts\n /other.component.ts\n /index.ts\nRun Code Online (Sandbox Code Playgroud)\n\n问题:
\n\n@myNs/my-lib) 外部具有 TypeScript 路径?