NPM 常用命令(十二)

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: NPM 常用命令(十二)

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,它依赖于依赖 dep1dep2、.. 等)。 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"
  ]
}

插入符号依赖

如果 apppackage.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的最后一个版本。

波浪号依赖

但是,如果 apppackage.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.jsonbin 字段中有一个条目,或者如果所有条目都是同一命令的别名,则将使用该命令。
  • 如果包有多个 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


相关文章
|
6月前
|
JavaScript 前端开发 数据安全/隐私保护
详细介绍NPM的基本使用方法、常用命令和一些实用技巧
详细介绍NPM的基本使用方法、常用命令和一些实用技巧
219 0
|
6月前
|
Ubuntu
node、npm 命令升级
node、npm 命令升级
130 0
|
6月前
设置VSCode运行任务命令快捷键Alt+R,通常用于npm start(对频繁使用该命令可节省50%的输入命令行打字时间)
设置VSCode运行任务命令快捷键Alt+R,通常用于npm start(对频繁使用该命令可节省50%的输入命令行打字时间)
|
6月前
|
JavaScript 前端开发 Shell
NPM 自定义 package.json 中 scripts 命令(& 与 && 的区别,cross-env 的使用)
NPM 自定义 package.json 中 scripts 命令(& 与 && 的区别,cross-env 的使用)
228 0
|
5月前
|
缓存 JavaScript 前端开发
npm命令介绍
npm命令介绍
|
4月前
|
缓存 JavaScript 前端开发
npm常用命令详解与实践
npm常用命令详解与实践
|
4月前
|
JavaScript
TS,编写TS文件,编写hello.ts文件,cmd下打开终端,输入tsc hello.ts会生成一个hello.js文件,简化命令,npm i -g ts-node,ts-node hello.ts
TS,编写TS文件,编写hello.ts文件,cmd下打开终端,输入tsc hello.ts会生成一个hello.js文件,简化命令,npm i -g ts-node,ts-node hello.ts
|
6月前
|
JSON JavaScript 数据安全/隐私保护
npm命令:常用npm命令及其详解!
npm命令:常用npm命令及其详解!
|
5月前
|
JavaScript
# 解决输入任何npm命令都报Error: Cannot find module ‘are-we-there-yet‘
# 解决输入任何npm命令都报Error: Cannot find module ‘are-we-there-yet‘
|
6月前
|
JavaScript Unix Shell
#! /usr/bin/env node 命令与 npm link 建立项目间软连接(一)
#! /usr/bin/env node 命令与 npm link 建立项目间软连接(一)
126 0