1、npm unpublish
此命令会从npm注册表中删除发布的包
1.1 使用语法
npm unpublish [<package-spec>]
注意: 如果你的目的是鼓励用户升级,或者你不再想维护一个包,请考虑使用 deprecate命令(弃用)。
1.2 描述
这将从注册表中删除包版本,删除其条目并删除 tarball。
如果你没有登录,npm 注册表会返回错误。
如果你不指定版本或删除所有包的版本,则注册表将完全删除根包条目。
即使你取消发布包版本,该特定名称和版本组合也永远无法重复使用。 为了再次发布包,你必须使用新的版本号。 如果你取消发布整个包,则在 24 小时过去之前,你不得发布该包的任何新版本。
2、npm unstar
此命令将从你最喜欢的包中删除一个项目
2.1 使用语法
npm unstar [<package-spec>...]
与 npm star 相反,它从你最喜欢的包列表中删除一个项目。
3、npm update
此命令可用来更新包
3.1 使用语法
npm update [<pkg>...] 别名: up, upgrade, udpate
3.2 描述
此命令会将列出的所有包更新到最新版本(由 tag 配置指定),同时尊重包及其依赖的 semver 约束(如果它们也需要相同的包)。
它还将安装缺少的包。
如果指定了 -g
标志,此命令将更新全局安装的包。
如果未指定包名称,则将更新指定位置(全局或本地)中的所有包。
请注意,默认情况下,npm update
不会更新项目 package.json
中直接依赖的 semver 值,如果你还想更新 package.json
中的值,你可以运行: npm update --save
(或将 save=true
选项添加到 配置文件 以使其成为默认行为)。
3.3 示例
对于下面的示例,假设当前包是 app
,它依赖于依赖 dep1
(dep2
、.. 等)。 dep1
的已发布版本是:
{ "dist-tags": { "latest": "1.2.2" }, "versions": [ "1.2.2", "1.2.1", "1.2.0", "1.1.2", "1.1.1", "1.0.0", "0.4.1", "0.4.0", "0.2.0" ] }
插入符号依赖
如果 app
的 package.json
包含:
"dependencies": { "dep1": "^1.1.1" }
那么 npm update 会安装 dep1@1.2.2,因为 1.2.2 就是 latest,1.2.2 满足 ^1.1.1。
注意:将会安装1.x.x的最后一个版本。
波浪号依赖
但是,如果 app
的 package.json
包含:
"dependencies": { "dep1": "~1.1.1" }
在这种情况下,运行 npm update
将安装 dep1@1.1.2
。 尽管 latest
标签指向 1.2.2
,但这个版本不满足 ~1.1.1
,相当于 >=1.1.1 <1.2.0
。 所以使用满足 ~1.1.1
的最高排序版本,即 1.1.2
。
注意:将按照1.1.x的最后一个版本进行安装。
低于 1.0.0 的插入符号依赖
假设 app
对低于 1.0.0
的版本有插入符号依赖,例如:
"dependencies": { "dep1": "^0.2.0" }
npm update
会安装 dep1@0.2.0
,因为没有其他版本可以满足 ^0.2.0
。
如果依赖于 ^0.4.0
:
"dependencies": { "dep1": "^0.4.0" }
那么 npm update
会安装 dep1@0.4.1
,因为那是满足 ^0.4.0
(>= 0.4.0 <0.5.0
)的最高排序版本
子依赖
假设你的应用现在也依赖于 dep2
{ "name": "my-app", "dependencies": { "dep1": "^1.0.0", "dep2": "1.0.0" } }
而 dep2 本身就依赖于 dep1 的这个有限范围
{ "name": "dep2", "dependencies": { "dep1": "~1.1.1" } }
然后 npm update
将安装 dep1@1.1.2
,因为这是 dep2
允许的最高版本。 当单个版本可以满足树中多个依赖的 semver 要求时,npm 将优先在树中拥有单个版本的 dep1
,而不是两个。 在这种情况下,如果你确实需要你的包来使用更新的版本,你需要使用 npm install
。
更新全局安装的包
npm update -g
将对每个全局安装的 outdated
包应用 update
操作 - 也就是说,具有与 wanted
不同的版本。
注意: 全局安装的包被视为安装时指定了插入符号 semver 范围。 因此,如果你需要更新到 latest
,你可能需要运行 npm install -g [<pkg>...]
注意: 如果包已升级到比 latest
更新的版本,它将被降级。
4、npm version
此命令可用来查看npm版本相关信息。
4.1 使用语法
npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease | from-git] 别名: verison
5、npm view
此命令可以查看查看注册表信息。
5.1 使用语法
npm view [<package-spec>] [<field>[.subfield]...] 别名: info, show, v
5.2 描述
此命令显示有关包的数据并将其打印到标准输出。
例如,要从注册表中查看有关 jquery 包的信息,你可以运行:
npm view jquery
如果未指定,则默认版本为 "latest"
。
可以在包描述符之后指定字段名称。 例如,要显示 0.3.5
版本的 ronn
包的依赖,你可以执行以下操作:
npm view ronn@0.3.5 dependencies
你可以通过用句点分隔子字段来查看子字段。 要查看最新版本 jquery的 git 存储库 URL,你将运行以下命令:
npm view jquery repository.url
这使得使用一些 shell 脚本可以轻松查看有关依赖的信息。 例如,要查看 ronn
所依赖的 opts
版本的所有数据,可以这样写:
npm view opts@$(npm view ronn dependencies.opts)
对于数组字段,请求非数字字段将返回列表中对象的所有值。 例如,要获取 express
包的所有贡献者电子邮件地址,你可以运行:
npm view express contributors.email
你还可以在方括号中使用数字索引来专门选择数组字段中的项目。 要获取列表中第一个贡献者的电子邮件地址,你可以运行:
npm view express contributors[0].email
如果你要查询的字段值是对象的属性,你应该运行:
npm view express time'[4.8.0]'
可以指定多个字段,并且将一个接一个地打印。 例如,要获取所有贡献者名称和电子邮件地址,你可以这样做:
npm view express contributors.name contributors.email
"Person" 字段如果显示为对象,则显示为字符串。 因此,例如,这将以缩短的字符串格式显示 npm 贡献者的列表。
npm view npm contributors
如果提供了版本范围,则将为包的每个匹配版本打印数据。 这将显示每个匹配的 yui3
版本需要哪个版本的 jsdom
:
npm view yui3@'>0.5.4' dependencies.jsdom
要显示 connect
包版本历史,你可以这样做:
npm view connect versions
6、npm whoami
此命令用于显示 npm 用户名
6.1 使用语法
npm whoami
6.2 描述
显示当前登录用户的 npm 用户名。
如果登录到提供基于令牌的身份验证的注册表,则连接到 /-/whoami
注册表端点以查找与令牌关联的用户名,并打印到标准输出。
如果登录到使用基本身份验证的注册表,则只需打印身份验证字符串的 username
部分。
7、npx
此命令用于从本地或远程 npm 包运行命令
7.1 使用语法
npx -- <pkg>[@<version>] [args...] npx --package=<pkg>[@<version>] -- <cmd> [args...] npx -c '<cmd> [args...]' npx --package=foo -c '<cmd> [args...]'
7.2 描述
此命令允许你在与通过 npm run
运行类似的上下文中从 npm 包(本地安装或远程获取)运行任意命令。
--package
选项指定的任何包都将在执行命令的 PATH
中提供,以及任何本地安装的包可执行文件。 --package
选项可以指定多次,以在所有指定包都可用的环境中执行提供的命令。
如果本地项目依赖中不存在任何请求的包,则将它们安装到 npm 缓存中的文件夹中,该文件夹在执行过程中添加到 PATH
环境变量中。 打印一个提示(可以通过提供 --yes
或 --no
来抑制)。
不带说明符的包名称将与本地项目中存在的任何版本匹配。 仅当具有与本地依赖完全相同的名称和版本时,带有说明符的包名称才会被视为匹配。
如果未提供 -c
或 --call
选项,则使用位置参数生成命令字符串。 如果未提供 --package
选项,则 npm 将尝试根据以下启发式方法从作为第一个位置参数提供的包说明符中确定可执行文件名称:
- 如果包在
package.json
的bin
字段中有一个条目,或者如果所有条目都是同一命令的别名,则将使用该命令。 - 如果包有多个
bin
条目,其中一个与name
字段的无范围部分匹配,则将使用该命令。 - 如果这不会导致恰好一个选项(或者因为没有 bin 条目,或者它们都不匹配包的
name
),那么npm exec
会以错误退出。
要运行指定二进制文件以外的二进制文件,请指定一个或多个 --package
选项,这将阻止 npm 从第一个命令参数推断包。
7.3 npx 与 npm exec
通过 npx
二进制文件运行时,必须在任何位置参数之前设置所有标志和选项。 通过 npm exec
运行时,可以使用双连字符 --
标志来禁止 npm 解析应发送到执行命令的开关和选项。
例如:
npx foo@latest bar --package=@npmcli/foo
在这种情况下,npm 将解析 foo
包名,并运行以下命令:
foo bar --package=@npmcli/foo
由于 --package
选项位于位置参数之后,因此它被视为已执行命令的参数。
相比之下,由于 npm 的参数解析逻辑,运行这个命令是不同的:
$ npm exec foo@latest bar --package=@npmcli/foo
在这种情况下,npm 会先解析 --package
选项,解析 @npmcli/foo
包。 然后,它将在该上下文中执行以下命令:
foo@latest bar
建议使用双连字符来明确告诉 npm 停止解析命令行选项和开关。 因此,以下命令等同于上面的 npx
命令:
npm exec -- foo@latest bar --package=@npmcli/foo