"npm uninstall"与"npm uninstall --save"的区别

3
“npm uninstall packageName”命令会删除该软件包并更新package.json文件。
但是根据npm文档,如果要从package.json的依赖项中删除软件包,请使用--save标志。如果软件包是作用域的,则需包含作用域。
请问有人可以阐明--save标志实际上是做什么的吗?
1个回答

5

--save标志表示模块记录将从package.json中删除。 默认情况下,如果您在不带参数的情况下调用uninstall命令,npm将从package.json中删除模块记录以及从node_modules中删除模块文件夹。 在npm的早期版本中,您应该明确指定该标志。

npmjs文档:

npm uninstall有3个互斥的可选标志,可以将包保存或更新到主要的package.json中:

-S, --save:将从依赖项中删除该包。

-D, --save-dev:将从devDependencies中删除该包。

-O, --save-optional:将从optionalDependencies中删除该包。

--no-save:将不会从您的package.json文件中删除包。


你的说法“包只会从node_modules文件夹中删除,但package.json中的记录不会改变”是错误的。我在本地进行了测试。当我卸载一个包时,依赖项属性中的条目会被删除。这就是为什么我在问题中已经提到了这一点。 - santanu bera
是的,您是正确的。npm在其中一个最新版本中更改了安装/卸载命令的行为。 - alexmac
我正在使用NPM 5.6.0版本。我进行了两种测试。首先,我手动在package.json文件中引用了该软件包,然后运行“npm install”。在第二个测试中,我使用“npm install packageName”安装了该软件包。当我运行“npm uninstall PackageName”时,在这两种情况下,package.json文件都会相应地更新。我还检查了一个软件包位于dependencies下,另一个软件包位于“devDependencies”下。在所有情况下,不带--save标志的卸载命令的行为都是相同的。我认为在这个npm版本中没有区别。 - santanu bera
有趣的是,--save 标志在 npm installnpm uninstall 中的行为是相同的(即,无论您是否包含它,该软件包都将从 node_modules 和 package.json 中删除)- 然而它仍然在 uninstall 文档中提到,但不在 install 文档中。 - Woodchuck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接