Node.js 如何防止npm安装删除软件包?

Node.js 如何防止npm安装删除软件包?,node.js,npm,Node.js,Npm,我正试图用几个软件包建立一个开发环境,因此我需要手动安装一些依赖项。更具体地说,我在几个包中进行了一些本地更改,在将它们推送到github之前,我需要对这些更改进行测试,因此我不能只在顶层安装npm,因为它不会接受这些更改。因此,我在缺少的软件包上手动运行第一个npm安装,然后尝试运行我的节点代码,查看它仍然缺少哪个软件包,然后尝试npm安装它所说的缺少什么 但是,当我安装第二个软件包时,它会显示以下消息: added 3 packages from 4 contributors, remove

我正试图用几个软件包建立一个开发环境,因此我需要手动安装一些依赖项。更具体地说,我在几个包中进行了一些本地更改,在将它们推送到github之前,我需要对这些更改进行测试,因此我不能只在顶层安装
npm,因为它不会接受这些更改。因此,我在缺少的软件包上手动运行第一个
npm安装
,然后尝试运行我的节点代码,查看它仍然缺少哪个软件包,然后尝试
npm安装
它所说的缺少什么

但是,当我安装第二个软件包时,它会显示以下消息:

added 3 packages from 4 contributors, removed 799 packages and audited 3 packages in 4.197s
第二次安装几乎删除了所有已安装的软件包!我直到第三次才注意到这一点,当时我意识到我似乎在一遍又一遍地安装同样的东西


但是,我是否可以防止这种特别顽皮的行为,并强制npm只安装我告诉它的内容,而不安装其他内容?

是否将依赖项保存到package.json? 保存:
npm安装——保存{package\u name}
。这将把包保存到package.json并使用
npm install
安装


您无法(完全)控制依赖关系。您安装的依赖项可能正在使用依赖项本身。因此,当您删除包时,npm将删除包的所有依赖项和包。

如果需要针对修改后的包进行测试,请查看
npm link

发件人: 这对于安装您自己的东西很方便,因此您可以对其进行操作并进行迭代测试,而无需不断地重新构建

假设
b
a
的依赖项。您对
b
进行了更改,并希望检查
a
是否仍适用于这些更改。不要在从
npm
安装的
node\u模块中使用
b
,而是使用您的本地修改版本:

cd ~/projects/b    # go into the package directory
npm link           # creates global link
cd ~/projects/a    # go into some other package directory.
npm link b         # link-install the package

现在,如果您的开发流程涉及到并行更新相互依赖的包,则对
~/projects/b
的任何更改都将反映在
~/projects/a/node\u modules/b/
中,您可以考虑将项目的包管理器从“代码> NPM < /代码>转换为<代码>纱线< /代码>以利用纱线。
Threads的工作区允许您轻松设置包含所有相互关联的依赖项的单个monorepo
,并让Threads思考如何在您的开发环境中将它们链接起来。

我今天遇到了类似的问题,我想这可能会对将来的人有所帮助,我发现如果你同时安装它

npm安装--保存程序包1程序包2程序包3

它和我一样有效

npm安装xlsx angular-oauth2-oidc

但如果单独安装,则会出现问题

编辑2更多信息由@Michael


在同一命令中安装多个软件包还可以防止钩子被多次安装

只需使用
warn
安装软件包,而不是在安装软件包时使用npm

yarn add package-name

结果表明,npm不仅删除了一些已安装的软件包,其中一个是我所做更改的本地软件包,但由于我正在尝试设置所有内容,所以没有保存该软件包!这是可行的,但不幸的是,现在我不得不将开发中的包的所有依赖项重新安装到它自己的目录中,而不能使用当前目录中已经安装的依赖项。