介绍
公共 npm 注册表是 JavaScript 包的数据库,每个包都由软件和
package.json 文件描述的文件或目录。包含 package.json 文件才能发布到 npm 注册表。
注意,npm 支持发布公共包和私有两种包,由于私有包需要付费这里大部分公司都采用的是私有镜像来管理包。
npm 的安装
在安装node的时候会自动安装npm
略...
npm 的注册
在用户注册表单中,输入以下字段:
- 用户名: 当你在 npmjs.com 上发布包或与其他 npm 用户交互时将显示的用户名。你的用户名必须小写,并且可以包含连字符和数字。
- 电子邮件地址: 你的公共电子邮件地址将被添加到你的包的元数据中,并且任何下载你的包的人都可以看到。当你更新包以及不定期的产品更新和信息时,我们也会向此账户发送电子邮件。
- 密码: 你的密码必须
- 超过十个字符
-
- 不匹配或明显包含你的用户名,例如不要使用 'username123'
- 没有被 Have I Been Pwned 泄露数据库入侵和知晓
登录
-
在命令行上,键入以下命令:
npm login -
出现提示时,输入你的用户名、密码和电子邮件地址。
-
如果你启用了 双重身份验证,当出现提示时,输入一次性密码。
-
要测试你是否已成功登录,请键入:
npm whoami应该显示你的 npm 用户名。
npm 命令
项目初始化
-
npm init- 说明:用于初始化一个新的 Node.js /其他项目,会引导你逐步输入项目的名称、版本、描述等信息,最终生成
package.json文件。 - 示例:
- 说明:用于初始化一个新的 Node.js /其他项目,会引导你逐步输入项目的名称、版本、描述等信息,最终生成
npm init
- 快捷方式:使用
npm init -y可以跳过交互式问答,直接使用默认值生成package.json文件。
包的安装
安装生产依赖
-
npm install <package-name>-
说明:安装指定名称的包,并将其添加到
package.json文件的dependencies字段中,这些依赖是项目在生产环境中运行所必需的。 -
示例:安装
express框架
-
npm install express
安装开发依赖
注意 开发依赖指的是在打包时候不会打入你的应用程序在,常用与一些工程化配置工具或插件
-
npm install <package-name> --save-dev或npm install <package-name> -D-
说明:安装指定名称的包,并将其添加到
package.json文件的devDependencies字段中,这些依赖仅在开发和测试过程中需要。 -
示例:安装
jest测试框架作为开发依赖
-
npm install jest --save-dev
安装全局包
注意 全局安装的包常用于一些工程化脚手架或是一些服务工具
-
npm install <package-name> -g-
说明:将包安装到全局环境中,使其可以在任何项目中使用。全局安装的包通常是一些命令行工具。
-
示例:安装
nodemon工具
-
npm install nodemon -g
安装特定版本的包
-
npm install <package-name>@<version>-
说明:安装指定版本的包。
-
示例:安装
lodash的4.17.21版本
-
npm install lodash@4.17.21
根据 package.json 安装所有依赖
-
npm install或npm i- 说明:在项目根目录下运行此命令,会根据
package.json文件中记录的依赖信息,安装所有生产依赖和开发依赖。
- 说明:在项目根目录下运行此命令,会根据
npm install
包的更新
-
npm update <package-name>-
说明:更新指定名称的包到最新的兼容版本,更新后会修改
package.json文件中的版本号。 -
示例:更新
express包
-
npm update express
-
npm update- 说明:更新项目中所有依赖到最新的兼容版本。
npm update
包的卸载
-
npm uninstall <package-name>- 说明:卸载指定名称的包,并从
package.json文件的dependencies或devDependencies字段中移除。 - 示例:卸载
express包
- 说明:卸载指定名称的包,并从
npm uninstall express
-
npm uninstall <package-name> -g-
说明:卸载全局安装的包。
-
示例:卸载全局的
nodemon工具
-
npm uninstall nodemon -g
脚本命令执行
-
npm run <script-name>-
说明:执行
package.json文件中scripts字段下定义的脚本命令。 -
示例:如果
package.json中有如下配置:
-
{
"scripts": {
"start": "node index.js"
}
}
- 可以使用以下命令启动项目:
npm run start
- 对于一些常用的脚本命令,如
start、test,可以省略run直接使用,例如npm start、npm test。
包信息查看
-
npm list-
说明:查看当前项目中安装的所有包及其依赖关系。
-
示例:
-
npm list
-
npm list -g- 说明:查看全局安装的所有包。
npm list -g
-
npm view <package-name>- 说明:查看指定包的详细信息,如版本、描述、依赖等。
- 示例:查看
express包的信息
npm view express
包搜索
-
npm search <keyword>-
说明:在 npm 注册表中搜索包含指定关键字的包。
-
示例:搜索与
date相关的包
-
npm search date
设置镜像
由于一些不可抗力所以我们可能直接从npm下载包很慢这里就可以设置国内源
配置淘宝镜像
npm config set registry registry.npmmirror.com
配置成默认地址
npm config set registry registry.npmjs.org/
查看全局安装的模块
npm list -g
查看某个模块版本号
npm list 包名
查看 配置的源地址
npm config get registry
迁移到其他账户
由于目前无法更改你的 npm 用户名。 你需要创建一个新账户并将数据手动迁移到新账户。
- 使用你想要的用户名创建一个 新的用户账户
- 转移你的包到你的新账户。
要使用 CLI 将包转移给另一个 npm 用户,请运行npm owner add命令,将<their-username>替换为其他用户的 npm 用户名。向其他用户发送电子邮件邀请。用户接受邀请后,运行npm owner rm命令,将<your-username>替换为你的 npm 用户名:
// 添加其他人作为贡献者
npm owner add <their-username> <package-name>
// 删除自己作为贡献值
npm owner rm <your-username> <package-name>
如果你为写入启用了双重身份验证,请向命令 --otp=123456 添加一次性密码(其中 123456 是你的身份验证器应用的代码)。
npm owner add <their-username> <package-name> --otp=123456
npm owner rm <your-username> <package-name> --otp=123456
4. 如果你是任何 组织 的成员,请求组织管理员 邀请你的新账户加入组织。 5. 删除你的 原始账户。请注意,这是永久性的,30 天后,此账户名称可供其他人使用。
npm 包的权限
| 范围 | 访问权限 | 可以查看和下载 | 可写(发布) |
|---|---|---|---|
| 组织 | 私有 | 组织中对包具有读取权限的团队成员 | 组织中对包具有读写权限的团队成员 |
| 组织 | 公共 | 所有人 | 组织中对包具有读写权限的团队成员 |
| 用户 | 私有 | 包所有者和已被授予对包的读取权限的用户 | 包所有者和被授予对包的读写权限的用户 |
| 用户 | 公共 | 所有人 | 包所有者和被授予对包的读写权限的用户 |
| 无范围 | 公共 | 所有人 | 包所有者和被授予对包的读写权限的用户 |
错误排除
当一个包安装或发布失败时,npm CLI 将生成一个 npm-debug.log 文件。此日志文件可以帮助你找出问题所在。
如果需要生成 npm-debug.log 文件,可以运行以下命令之一。
对于安装包:
npm install --timing
对于发布包:
npm publish --timing
你可以在 .npm 目录中找到 npm-debug.log 文件。要查找你的 .npm 目录,请使用 npm config get cache。
npm 包发布
(一)准备工作
-
初始化项目:在项目根目录下,运行npm init命令,按照提示填写项目名称、版本、描述、入口文件等信息,生成package.json文件。
-
编写代码:确保你的代码遵循模块化规范,并且功能完备、测试通过。
-
配置 .npmignore 文件:如果你有一些文件或目录不想发布到 npm 上,比如node_modules、测试文件、日志文件等,可以在项目根目录下创建.npmignore文件,写入要忽略的文件或目录规则。
(二)发布步骤
-
登录 npm:在命令行中运行npm login,输入你的 npm 账号(用户名、密码和邮箱)。如果没有账号,需要先在npm 官网注册。
-
发布包:在项目根目录下运行npm publish命令。如果一切正常,你的包就会发布到 npm 注册表中,其他开发者可以通过npm install 来安装使用。
(三)发布注意事项
-
版本管理:遵循语义化版本控制(SemVer)规范,即MAJOR.MINOR.PATCH格式。MAJOR版本号在有不兼容的 API 变更时递增;MINOR版本号在有向下兼容的新功能添加时递增;PATCH版本号在有向下兼容的错误修复时递增。
-
包名唯一性:确保你的包名在 npm 注册表中是唯一的,避免与已有的包名冲突。可以在 npm 官网搜索包名,确认是否可用。
npm 包撤销
撤销步骤
- 撤销最近发布的版本:
-
- 确保已登录 npm 账号。
-
- 在命令行中运行npm unpublish <package - name>,<package - name>是你要撤销的包名。执行后,最近发布的版本将从 npm 注册表中移除。
- 撤销特定版本:
-
- 同样需先登录 npm 账号。
-
- 运行npm unpublish <package - name>@,<package - name>为包名,是要撤销的具体版本号,如npm unpublish my - package@1.0.0。
撤销注意事项
- 时间限制:npm 允许在包发布后的 24 小时内无限制地撤销版本。超过 24 小时后,通常只能撤销存在安全漏洞等特殊情况的包,且需联系 npm 支持团队。
- 对依赖项目的影响:撤销包可能会影响依赖该包的其他项目,导致构建失败或运行时错误。所以在撤销前,务必通知依赖该包的项目开发者。
- 重新发布:撤销包后若要重新发布,建议修改版本号,遵循语义化版本控制规范,避免与之前撤销的版本混淆。
npm 包取消(发布过程中取消)
-
发布中取消:在执行npm publish命令期间,如果想要取消发布,可在命令行中按下Ctrl + C组合键中断发布操作。
-
发布完成但未同步取消:若发布操作已完成但还未完全同步到 npm 注册表(这种情况较为少见),可尝试立即使用上述撤销步骤撤销刚刚发布的包。
npmrc
.npmrc 是一个用于配置 npm(Node Package Manager)行为的文件,它允许开发者根据自己的需求定制 npm 的各种设置,这些设置可以影响包的安装、发布等操作。以下从文件位置、配置内容、优先级、使用场景几个方面详细介绍:
配置优先级
当存在多个 .npmrc 文件时,npm 会按照以下优先级读取配置:
- 命令行参数:通过命令行直接传递的参数优先级最高,例如
npm install --registry=https://registry.npmmirror.com会覆盖.npmrc中的registry配置。 - 项目级
.npmrc:位于项目根目录下的.npmrc文件,只对当前项目有效。 - 用户级
.npmrc:位于用户主目录下的全局配置文件。 - 全局配置文件(通过
npm config get globalconfig查看路径)。 - 内置
.npmrc:npm 自带的默认配置。
使用场景
- 使用镜像源:国内网络访问官方 npm 注册表可能较慢,通过配置
.npmrc使用国内镜像源(如淘宝镜像、npmmirror)可以显著提高包的下载速度。 - 访问私有包:企业内部可能有自己的私有 npm 注册表,开发者可以在
.npmrc中配置认证信息和注册表地址,以便访问和使用私有包。 - 统一开发环境:在项目级
.npmrc中配置一些特定的设置,可以确保团队成员在开发过程中使用相同的 npm 配置,避免因配置差异导致的问题。
注册表配置
注册表是存储和分发 npm 包的地方,默认的 npm 注册表是 https://registry.npmjs.org/,但你可以根据需求切换到其他注册表,例如国内的镜像以提高下载速度。
收起
plaintext
# 使用淘宝镜像
registry=https://registry.npmmirror.com
如果你需要在不同的注册表间切换,可以使用以下命令临时修改注册表:
收起
bash
npm config set registry https://registry.npmjs.org
认证信息配置
当访问私有注册表时,通常需要提供认证信息,比如 token。
收起
plaintext
# 配置私有注册表的认证信息
//your-private-registry-url/:_authToken=your-auth-token
这里的 your-private-registry-url 是私有注册表的地址,your-auth-token 是你获得的认证令牌。
代理配置
如果你的网络环境需要通过代理才能访问外部资源,就需要配置代理信息。
收起
plaintext
# HTTP 代理
proxy=http://proxy.example.com:8080
# HTTPS 代理
https-proxy=http://proxy.example.com:8080
若代理需要认证,可使用如下格式:
收起
plaintext
proxy=http://username:password@proxy.example.com:8080
https-proxy=http://username:password@proxy.example.com:8080
日志级别配置
可以设置 npm 输出日志的详细程度,常见的日志级别有 silent、error、warn、http、info、verbose 和 silly。
收起
plaintext
# 设置日志级别为 info
loglevel=info
日志级别越高,输出的信息越详细。
缓存配置
可以指定 npm 缓存的存储位置,以及是否强制重新下载包而不使用缓存。
# 指定缓存目录
cache=/path/to/your/cache
# 强制重新下载,不使用缓存
force=true
包安装配置
可以配置包的安装行为,例如是否自动保存依赖到 package.json 文件。
收起
plaintext
# 自动将安装的包保存到 dependencies 字段
save=true
# 自动将安装的包保存到 devDependencies 字段
save-dev=true
安装包时忽略脚本
有时候,你可能希望在安装包时忽略包中定义的脚本(如 preinstall、install、postinstall 等)。
# 忽略安装脚本
ignore-scripts=true
配置默认包版本范围
当安装包时,npm 默认会使用语义化版本范围(如 ^),你可以修改这个默认行为。
# 使用精确版本安装包,不使用版本范围
save-exact=true
配置并行安装
可以控制 npm 并行安装包的数量,以提高安装速度。
# 设置并行安装的最大数量
maxsockets=5
示例 .npmrc 文件
registry=http://registry.npmjs.org/
# 定义npm的registry,即npm的包下载源
proxy=http://proxy.example.com:8080/
# 定义npm的代理服务器,用于访问网络
https-proxy=http://proxy.example.com:8080/
# 定义npm的https代理服务器,用于访问网络
strict-ssl=true
# 是否在SSL证书验证错误时退出
cafile=/path/to/cafile.pem
# 定义自定义CA证书文件的路径
user-agent=npm/{npm-version} node/{node-version} {platform}
# 自定义请求头中的User-Agent
save=true
# 安装包时是否自动保存到package.json的dependencies中
save-dev=true
# 安装包时是否自动保存到package.json的devDependencies中
save-exact=true
# 安装包时是否精确保存版本号
engine-strict=true
# 是否在安装时检查依赖的node和npm版本是否符合要求
scripts-prepend-node-path=true
# 是否在运行脚本时自动将node的路径添加到PATH环境变量中
这个示例文件配置了使用淘宝镜像、设置了代理、日志级别为 info、自动保存依赖到 package.json 并使用精确版本。