克隆和安装包含typescript`@types`的项目的正确方法是什么?

克隆和安装包含typescript`@types`的项目的正确方法是什么?,typescript,types,Typescript,Types,我在做一个项目,其中包括安装一些@类型 npm install react react-dom typescript @types/react @types/react-dom --save 它工作得非常好。但是,当我尝试在另一台机器上安装git clone然后安装npm项目时。。。它不安装任何@类型,实际上只是将它们从包锁.json中删除。克隆和安装此项目的正确方法是什么?有趣的是,我发现package.json实际上完全缺少@类型!只有package lock.json似乎单独引用了它们!

我在做一个项目,其中包括安装一些
@类型

npm install react react-dom typescript @types/react @types/react-dom --save

它工作得非常好。但是,当我尝试在另一台机器上安装git clone然后安装npm项目时。。。它不安装任何
@类型
,实际上只是将它们从
包锁.json中删除。克隆和安装此项目的正确方法是什么?

有趣的是,我发现
package.json
实际上完全缺少
@类型!只有
package lock.json
似乎单独引用了它们!!因此,当我运行
npm install
时,它们只是从
package lock.json
中删除,因为它们不在
package.json

然而,这导致我重新评估是否应该首先将
package lock.json
作为git存储库的一部分。如果不是因为
package lock.json
,我就不会误以为
@types
已经是
package.json
的一部分了。此外,不同的机器有不同的软件组成,并且很可能有不同的依赖版本要求。为了不必要地“锁定”特定版本的这些依赖项,然后尝试在不同的操作系统设置上强制这些依赖项。。。只是不再有意义了


克隆
package.json
时,
npm install
应该能够找出正确的
package lock.json
版本控制,并重新生成它!在正常情况下,我不再明白为什么
package lock.json
应该是git的一部分,并强加给任何人

有趣的是,我发现
package.json实际上完全缺少
@类型
!只有
package lock.json
似乎单独引用了它们!!因此,当我运行
npm install
时,它们只是从
package lock.json
中删除,因为它们不在
package.json

然而,这导致我重新评估是否应该首先将
package lock.json
作为git存储库的一部分。如果不是因为
package lock.json
,我就不会误以为
@types
已经是
package.json
的一部分了。此外,不同的机器有不同的软件组成,并且很可能有不同的依赖版本要求。为了不必要地“锁定”特定版本的这些依赖项,然后尝试在不同的操作系统设置上强制这些依赖项。。。只是不再有意义了



克隆
package.json
时,
npm install
应该能够找出正确的
package lock.json
版本控制,并重新生成它!在正常情况下,我不再明白为什么
package lock.json
应该是git的一部分,并强加给任何人

它一点也不像。@AluanHaddad您介意详细说明一下吗?我的意思是install命令的行为和您描述的不一样。它绝对会将所有包(包括作用域包,如
@types/which
)添加到包和锁文件中,以便克隆存储库然后运行install命令的人安装这些包。换句话说,你还有其他问题。嗯。。。我正在关注这篇文章()。它起作用了。然而,正如我所说,当我在另一台机器上克隆项目并简单地键入
npm install
。。。
package lock.json
立即显示
@types
已从安装中删除。@AluanHaddad我除了1之外什么也不做。git克隆2。npm安装。。。然后这些类型就消失了!它一点也不像。@AluanHaddad您介意详细说明一下吗?我的意思是install命令的行为和您描述的不一样。它绝对会将所有包(包括作用域包,如
@types/which
)添加到包和锁文件中,以便克隆存储库然后运行install命令的人安装这些包。换句话说,你还有其他问题。嗯。。。我正在关注这篇文章()。它起作用了。然而,正如我所说,当我在另一台机器上克隆项目并简单地键入
npm install
。。。
package lock.json
立即显示
@types
已从安装中删除。@AluanHaddad我除了1之外什么也不做。git克隆2。npm安装。。。然后这些类型就消失了!我很高兴你能解决这个问题,但你的结论与NPM的文件完全矛盾。您必须签入锁定文件,否则安装将不稳定。这可能会导致微妙和高度模糊的错误。嗯。。。您知道NPM文档中的什么地方记录了这一点吗?我真的很想了解这些“微妙和高度模糊的错误”!谢谢。@AluanHaddad另外,经过一些研究。。。我不确定这件事是否像你想象的那样黑白分明。一些用户之间似乎存在意见分歧。@AluanHaddad这里只是众多例子中的一个,它描述了为什么应该忽略
package lock.json
。谢谢你在这个话题上指出了各种不同的观点。然而,我碰巧知道一个事实,您的问题是由于您的包没有在
package.json
文件中将类型包列为依赖项。在git中使用锁文件仍然是一个单独的问题,因为这些包与其他包一样。我只是不想让你觉得锁文件导致了实际问题我很高兴你解决了这个问题,但你的结论绝对与NPM的文档相矛盾。你必须签入你的锁文件,否则你将无法登录