目录
介绍
npm
和 npx
是 Node.js 包管理器中的两个重要工具,它们用于管理 JavaScript 包和执行 Node.js 程序。
-
npm:npm(Node Package Manager)是 Node.js 的默认包管理器,用于安装、管理和发布 JavaScript 包。通过 npm,开发者可以方便地安装第三方库、工具和框架,管理项目依赖关系,并发布自己的包到 npm 仓库。npm 还提供了一系列命令,如
npm install
、npm publish
、npm update
等,用于操作和管理 JavaScript 包。 -
npx:npx 是 npm 5.2.0 版本引入的新工具,用于执行 npm 包中的命令。与直接使用 npm 全局安装包不同,npx 允许您在不安装包的情况下直接运行它们的命令。这样可以避免全局安装过多的包,减少包管理器的混乱。npx 还支持从远程仓库动态下载包并执行命令,非常适合一次性使用的工具和脚本。
举例来说,使用 npm 安装全局的 Vue CLI:
npm install -g @vue/cli
然后通过 Vue CLI 创建一个新的 Vue 项目:
vue create my-project
使用 npx 直接创建一个新的 Vue 项目,无需全局安装 Vue CLI:
npx @vue/cli create my-project
总的来说,npm 是用于管理 JavaScript 包的包管理器,而 npx 则是用于执行 npm 包中的命令的工具。两者结合使用,可以更加高效地管理和执行 JavaScript 包和命令。
二、npm
2.1 安装
当使用 npm 安装软件包时,可以执行两种安装类型:
- 当前项目下安装
- 全局安装
默认情况下,当输入 npm install 命令时,例如:
npm install lodash
软件包会被安装到当前文件树中(项目)的 node_modules 子文件夹下。npm 还会在当前文件夹中存在的 package.json
文件的 dependencies 属性中添加 lodash 条目。这种方式适用于安装项目所需的依赖包,使得项目的依赖关系清晰可见,并且可以确保不同项目使用的包版本相互独立。
使用 -g
标志可以执行全局安装:
npm install lodash -g
在这种情况下,npm 不会将软件包安装到本地文件夹下,而是使用全局的位置。可以使用 npm root -g
命令获取其在计算机上的确切位置,如 /usr/local/lib/node_modules
。
注意,如果使用 nvm 管理 Node.js 版本,则该位置会有所不同。比如 /usr/local/lib/node_modules
会变成 /Users/username/.nvm/versions/node/v8.9.0/lib/node_modules
。
2.2 语义版本控制:semver
我们在 HOW - 编写并发布一个 npm 包模块(含 Cli 工具包开发) 进行过详细介绍,可跳转阅读。
2.3 包更新
对于更新依赖的修订版本号、次版本号和主版本号,可以使用 npm update
命令或 npm-check-updates
工具。下面是针对每个版本号类型的操作步骤:
1. 更新修订版本号:patch
- 使用
npm update
:
npm update <package>
- 使用
npm-check-updates
:
ncu -u --upgradeType patch
npm install
2. 更新次版本号:minor
- 使用
npm update
:
npm update <package>@^<next-minor-version>
- 使用
npm-check-updates
:
ncu -u --upgradeType minor
npm install
3. 更新主版本号:major
- 使用
npm update
:
npm update <package>@^<next-major-version>
- 使用
npm-check-updates
:
ncu -u --upgradeType major
npm install
在这些命令中:
<package>
是要更新的包的名称。<next-minor-version>
是下一个要更新到的次版本号,格式为X.Y.Z
中的X
和Y
。<next-major-version>
是下一个要更新到的主版本号,格式为X.Y.Z
中的X
。
npm update
命令会直接更新指定包到指定版本,而 npm-check-updates
则会列出可用的更新,并要求您手动确认更新。注意,更新后,还需要使用 npm install
命令将更新的包安装到项目中。
三、npx
3.1 解决了什么
npx 是一个非常强大的命令,从 npm 的 5.2 版本(发布于 2017 年 7 月)开始可用。如果不想安装 npm,则可以安装 npx 为独立的软件包。npx 可以运行使用 Node.js 构建并通过 npm 仓库发布的代码。
npx
的主要目的是为了解决全局安装包同一个依赖不同版本冲突的问题。传统上,如果要执行某个 npm 包的命令,通常需要先全局安装该包,然后才能在命令行中直接调用它。但全局安装可能会导致多个项目之间的依赖冲突,也会使系统的环境变得混乱。另外,有了 npx ,在执行一次性的命令或使用项目中未安装的包时也将十分方便。
举例来说,开发者过去通常将大多数可执行命令安装为全局 -g
的软件包,以使得它们处于路径中且可被不同项目立即执行,但当遇到a项目想使用 webpack2,但是b项目想使用 webpack3,这很痛苦,因为无法真正地安装同一命令的不同版本。另外,npx 另一个重要的特性是无需先安装命令,即可运行命令,当命令下载完执行结束,就会被擦除。
3.2 基本使用
npx cowsay 'hello'
npx @vue/cli create app
另外,npx 也可以使用 @version
语法运行统一命令的不同版本。
npx node@10 -v #v10.18.1
npx node@12 -v #v12.14.1
这将无需使用 nvm 之类的工具或其他 Node.js 版本管理工具。