npm基础
npm是什么
npm是一个世界上最大的软件注册表,包含超过60万个包(package)。包的结构可以轻松跟踪依赖性和版本。
npm由三个独立的部分组成:
网站: 网站 是开发者查找包(package)、设置参数以及管理 npm 使用体验的主要途径。
注册表 :注册表 是一个巨大的数据库,保存了每个包(package)的信息。
命令行工具 (CLI) :CLI 通过命令行或终端运行。开发者通过 CLI 与 npm 打交道。
如何安装npm并管理
npm是Node.js编写的,所以需要安装Node.js去使用npm,可以通过Node.js网站安装npm,也可以安装NVM(Node Version Manager)。
强烈建议使用nvm这样的Node版本管理器来安装Node.js和npm。不建议使用 Node 安装程序,因为 Node 安装过程会将 npm 安装在具有本地权限的目录中,并且在全局运行 npm 包时可能会导致权限错误。
Node 版本管理器允许你在系统上安装和切换多个版本的 Node.js 和 npm,以便你可以在多个版本的 npm 上测试你的应用,以确保它们适用于不同版本的用户。
npm的更新比node.js频繁,可使用下述命令来查看现在安装版本
npm -v
若不是最新可使用下述命令,更新到官方测试最新版本
npm install npm@latest -g
npm包和模块
公共 npm 注册表
公共 npm 注册表是 JavaScript 包的数据库,每个包都由软件和元数据组成。开源开发者和公司的开发者使用 npm 注册表向整个社区或其组织的成员贡献包,并下载包以在他们自己的项目中使用。
npm 注册表包含包,其中许多也是 Node 模块,或者包含 Node 模块。
关于包
包是由 package.json 文件描述的文件或目录。包必须含 package.json 文件才能发布到 npm 注册表。
包可以不限定范围或限定给用户或组织,限定范围的包可以是私有的或公共的。
关于模块
模块是 node_modules 目录中可以由 Node.js require() 函数加载的任何文件或目录。
要由 Node.js require() 函数加载,模块必须是以下之一:
-
包含 package.json 文件的文件夹,其中包含 "main" 字段。
-
一个 JavaScript 文件。
注意:由于模块不需要有 package.json 文件,因此并非所有模块都是包。只有具有 package.json 文件的模块也是包。
关于范围(需npm版本2及以上)
当你注册 npm 用户账户或创建组织时,你将获得与你的用户或组织名称匹配的范围。你可以将此范围用作相关包的命名空间。
范围允许你创建与其他用户或组织创建的包同名的包,而不会发生冲突。
当在 package.json 文件中列为依赖时,范围包的前面是它们的作用域名称。范围名称是 @ 和斜杠之间的所有内容:
-
"npm" 范围:
@npm/package-name
关于公共包
作为 npm 用户或组织成员,你可以创建和发布任何人都可以下载并在自己的项目中使用的公共包。
-
无范围公共包存在于全局公共注册表命名空间中,可以在 package.json 文件中仅使用包名称进行引用:package-name。
-
作用域公共包属于用户或组织,当作为依赖包含在 package.json 文件中时,必须以用户或组织名称开头:
-
@username/package-name
-
@org-name/package-name
-
关于私有包(需版本2.7及以上,一个付费用户或组织账户)
使用 npm 私有包,你可以使用 npm 注册表来托管仅对你和选定的协作者可见的代码,从而允许你在项目中管理和使用私有代码以及公共代码。
私有包总是有一个范围,而范围包默认是私有的。
-
用户范围的私有包只能由你和你授予读取或读/写访问权限的协作者访问。
-
组织范围内的私有包只能由已被授予读或读/写访问权限的团队访问。
npm包访问矩阵
只有用户账户可以创建和管理无范围的包。组织只能管理范围包。
package.json文件
创建package.json文件
{
//必填,字段包含你的软件包的名称,必须小写且不带空格。可能包含连字符、点和下划线。
"name": "my-awesome-package",
//必填,字段必须采用 x.x.x 格式,并且遵循 语义版本控制指南
"version": "1.0.0",
//作者信息
"author": "Your Name <email@example.com> (https://example.com)"
}
你可以通过运行 CLI 问卷或创建默认 package.json 文件来创建 package.json 文件。
运行CLI问卷
cd /path/to/package
npm init
创建默认package.json文件
cd /path/to/package
npm init --yes
设置init命令的配置选项
> npm set init-author-email "example-user@example.com"
> npm set init-author-name "example_user"
> npm set init-license "MIT"
在 package.json 文件中指定 dependencies 和 devDependencies
使用命令行
npm install <package-name> [--save-prod]
npm install <package-name> --save-dev
手动编辑
"name": "my_package",
"version": "1.0.0",
"dependencies": {
"my_dep": "^1.0.0",
"another_dep": "~2.2.0"
},
"devDependencies" : {
"my_test_framework": "^3.1.0",
"another_dev_dep": "1.0.0 - 1.2.0"
}
README.md文件
我们强烈建议在你的软件包目录中包含一个 README.md 文件,因为它可以帮助开发者在 npm 上找到你的软件包,并在他们的项目中使用你的代码时获得良好的体验。在大多数情况下,README.md 文件包含安装、配置和使用包中代码的说明;以及用户可能觉得有用的任何其他信息。与任何 GitHub 存储库一样,README.md 文件将渲染在软件包页面上。
创建并将README.md文件添加到包中
-
在文本编辑器中,在你的包根目录(README.md 文件必须位于包的根级目录中)中,创建一个名为 README.md 的文。
-
在 README.md 文件中,添加有关你的包的有用信息。
-
保存 README.md 文件。
更新现有的README.md文件
仅当你发布软件包的新版本时,README.md 文件才会在软件包页面上更新。要更新你的 README.md 文件
-
在文本编辑器中,更新 README.md 文件的内容。
-
保存 README.md 文件。
-
在命令行上,在包根目录中,运行以下命令:
npm version patchnpm publish
创建和发布包
npm用户可以创建无范围的包在自己的项目中使用,并将将它们发布到npm公共注册表以供其他人在他们的项目中使用。无范围的包始终是公共的,并且仅由报名册引用:package-name
要在用户或组织命名空间中公开共享你的代码,你可以将公共用户范围或组织范围的包发布到 npm 注册表。
要与一组有限的用户或团队共享你的代码,你可以将私有用户范围或组织范围的包发布到 npm 注册表。
创建无范围的公共包/范围公共包/私有包
对于创建范围公共包/私有包,如果你使用 npmrc 去 管理多个注册表上的账户,请在命令行上切换到相应的配置文件。
npmrc <profile-name>
1. 在命令行上,为你的包创建一个目录。
mkdir my-test-package
2. 导航到包的根目录。
cd my-test-package
3. 如果你使用 git 管理你的包代码,请在包根目录中运行以下命令,将 git-remote-url 替换为你的包的 git 远程 URL。
git init git remote add origin git://git-remote-url
4、
无范围的公共包,在包根目录下,运行命令。
npm init
范围公共包/私有包, 在包根目录中,运行 npm init 命令并将范围传递给 scope 标志。
对于组织范围的包,将 my-org 替换为你的组织名称。
npm init --scope=@my-org
对于用户范围的包,将 my-username 替换为你的用户名。
npm init --scope=@my-username
5.根据提示生成 package.json 文件。
6.创建一个 README 文件,说明你的包代码是什么以及如何使用它。
7.在你首选的文本编辑器中,为你的包编写代码。
发布前删除敏感信息
在发布到注册表前删除如密码、个人身份信息等敏感信息,对不太敏感信息使用 .npmignore 或 .gitignore 文件来防止发布到注册表。
发布前进行测试,以减少错误。
npm install path/to/my-package
发布无范围的公共包/范围公共包/私有包
1、在命令行上,导航到包的根目录。
cd /path/to/package
2、
无范围的公共包/私有包,要将你的公共包发布到 npm 注册表,请运行:
npm publish
要将范围公共包发布到 npm 注册表,请运行:
npm publish --access public
3、 要查看你的包页面,请访问 https://npmjs.com/package/*package-name*,将 *package-name* 替换为你的包名称。公共包会在 npm 网站上的包名下方显示 public。 私有包会在 npm 网站上的包名下方显示 private。
从注册表获取包
本地下载安转包
安转无范围的包
npm install <package_name>
安装范围公共包
npm install @scope/package-name
安装私有包
npm install @scope/private-package-name
测试包安装
ls node_modules
全局下载和安装包
npm install -g <package_name>
更新本地包
cd /path/to/project
npm update
npm outdated
更新全局安装的包
查看需要更新哪些全局包
npm outdated -g --depth=0
更新单个全局包
npm update -g <package_name>
更新所有全局安装的包
npm update -g
卸载本地包
卸载无范围包
npm uninstall <package_name>
卸载范围包
npm uninstall <@scope/package_name>
删除本地包而不从package.json中删除它
npm uninstall --no-save lodash
卸载全局包
无范围的包
npm uninstall -g <package_name>
范围包
npm uninstall -g <@scope/package_name>
故障排除
生成和定位npm-debug.log文件
当一个包安装或发布失败时,npm CLI 将生成一个 npm-debug.log 文件。此日志文件可以帮助你找出问题所在。
如果需要生成 npm-debug.log 文件,可以运行以下命令之一。
对于安装包:
npm install --timing
对于发布包:
npm publish --timing
你可以在 .npm 目录中找到 npm-debug.log 文件。要查找你的 .npm 目录,请使用
npm config get cache
随机错误
一些奇怪的问题可以通过简单地运行以下命令并重试来解决。
npm cache clean