我有一些我正在处理的包裹。他们导出类。一般的概念是,有一个核心包定义数据存储行为,然后是postgres包实现postgres的数据存储,另一个使用redis存储实现相同的东西,等等。
我的问题出在我的依赖树中,因为基础数据存储区依赖于rxjs,而某些插件模块也引用rxjs。所以:
+ node modules
+ -- core
+ rxjs 5.4.0
+ -- postgres
+ rxjs 5.4.1
除非核心和postgres模块声明对完全相同版本的rxjs的依赖关系,否则这两个不同的rxjs包将不会被删除。
它们实际上是相同的版本,但它们不是。我明白了。我可以在那里处理角落案件。问题是我不能再说了
const pgstore: Store = new PostgresStore();
因为我基本上不能将PostgresStore(在我的postgres包中声明)分配给一个通用的Store变量(在我的核心包中声明),因为有两个不同版本的rxjs在播放,因此Subject<string>
我作为私有财产存储在商店最终是两种不同的主题,并且这些不是可交叉分配的。 (例如,编译失败,因为“主题不能分配给主题类型,存在两个具有此名称的不同类型,但它们不相关。”)
我必须想象这并不罕见。什么是最佳实践(在构造依赖关系,devdependencies等)以避免这种挂断?它基本上导致了一个非常脆弱的安装,偶尔我花了一个小时摆弄npm和我的package.json文件以正确地重复删除(这也会干扰我使用npm link
本地的能力关于依赖包的开发,因为这会使重复数据删除更加困难。)
答案 0 :(得分:0)
概述here的一个特定解决方案是通过专门告诉typescript需要什么版本的东西来修复有问题的声明。我已将tsconfig.json更新为包含:
compilerOptions: {
"baseUrl": ".",
"paths": {
"@angular/*": ["node_modules/@angular/*"],
"rxjs": ["node_modules/rxjs"],
"plump": ["node_modules/plump"],
"rxjs/*": ["node_modules/rxjs/*"]
}
}
现在似乎正在解决我的问题 - 我仍然能够使用npm link
来处理我的丰富模块而没有打字稿让我感到很沮丧。
暂时搁置这个问题,因为这里可能有更好的答案。