我在两个仓库中进行开发,其中一个是另一个的依赖项。我使用npm v5。我在
问题在于,
这实际上是TypeScript的问题,因为显然它认为
我尝试将依赖项指定为
目前我唯一能想到的解决方法是让依赖项指向github服务器,然后每次我做出更改时提交并推送,并在主repo上重新运行
我想过在测试
我尝试在
main-repo
的package.json
中将依赖项指定为../dependent-repo
。当我运行npm install
时,这会在main-repo/node_modules
中创建一个指向../../dependent-repo
的符号链接,指向dependent-repo
。问题在于,
dependent-repo
本身有自己的node_modules
,因此当我引用(require或import)其依赖项中的内容时,默认解析过程会解析为dependent-repo/node_modules
中的依赖项,而不是main-repo/node_modules
中的依赖项。这实际上是TypeScript的问题,因为显然它认为
main-repo/node_modules/@angular/core
与dependent-repo/node_modules/@angular/core
不同,即使它们是相同版本和完全相同的二进制文件。这导致了类似于以下形式的TS错误:
我对这个问题很熟悉,因为当我使用'ViewContainerRef'类型的参数不能赋值给'typeof ViewContainerRef'。
npm link
时,它也出现在npm v3中。这个问题在TS问题列表中得到了广泛讨论,但据我所知还没有解决方案。我希望npm v5会以某种神奇的方式解决这个问题,但到目前为止还没有运气。我尝试将依赖项指定为
file://../dependent-repo
,但这只是创建了相同的符号链接(至少在npm5中;我记得在早期版本中可能复制了整个目录)。目前我唯一能想到的解决方法是让依赖项指向github服务器,然后每次我做出更改时提交并推送,并在主repo上重新运行
npm install
来获取最新更改。这正是我想要避免的。我想过在测试
main-repo
之前临时将dependent-repo/node_modules
重命名,因此它被省略在解析过程中。但是,这显然需要dependent-repo
的所有依赖项存在于main-repo
中。我尝试在
main-repo
的tsconfig.json
中玩弄paths
选项,并且使用像paths: {"*": ["node_modules"]}
这样的内容有所进展,但无法完全使其工作。
我知道angular-cli
可能已经对其内部的webpack配置进行了一些更改,以使它更好地工作,但不幸的是,我的main-repo
使用较旧的webpack构建过程,因此我无法使一些建议的更改(例如resolve: {fallback: [path.join(__dirname, 'node_modules')]}
或resolve: { modules: [ path.join(__dirname, "node_modules") ] }
)对我生效。