Appearance
很多语言都有这种包管理工具,Python的pip,Java的Maven一样的作用,包管理,最初的时候Node.js 是一个在德国工作的美国程序员 Ryan Dahl 写的。他写了 Node.js,但是 Node.js 缺少一个包管理器,于是他和 npm 的作者(Isaaz)一拍即合、抱团取暖,最终 Node.js 内置了 npm,当然前端的包管理工具并不局限在npm, 还有 yarn pnpm,现在的GitHub 收购npm,npm 也已经输入微软公司
npm 能做什么
- 允许用户从 npm 服务器下载别人编写的第三方包到本地使用。
- 允许用户从 npm 服务器下载并安装别人编写的命令行程序到本地使用。
- 允许用户将自己编写的包或命令行程序上传到 npm 服务器供别人使用。
TIP
npm 官方仓库或其他注册的仓库中下载,npm 的背后,是基于 couchdb 的一个数据库,详细记录了每个包的信息,包括作者、版本、依赖、授权信息等。它的一个很重要的作用就是:将开发者从繁琐的包管理工作(版本、依赖等)中解放出来,更加专注于功能的开发。
npm 能做到这三点都是源于npm 组成,npm 并不是在使用意义 cli 工具,他是通过
网站:npm 官方网站是 https://www.npmjs.com/,它提供了一些功能,如搜索软件包、管理依赖、发布软件包、创建组织等。
注册表: npm 的注册表 https://www.npmjs.com/signup 是一个公共数据库,存储了 JavaScript 软件包及其相关的元数据。开发者可以通过注册并登录到 npm 网站,将自己开发的软件包发布到注册表中,供其他人使用。
命令行工具(CLI):npm CLI 是开发者通过命令行或终端界面与 npm 进行交互的工具。开发者可以使用 npm CLI 安装、卸载、更新、发布、搜索软件包等操作。
如何安装使用
npm 不需要单独安装。在安装 Node 的时候,会连带一起安装 npm,但注意的是 npm 本身与 Node 的其他模块没有区别,他也仅仅是一个在node环境运行的js,因此也可以 用 npm 安装自己
shell
npm install npm -g
更新npm
shell
npm install npm@latest -g # 这将安装最新的官方测试版 npm。
npm install npm@next -g # 要安装将来发布的版本
npm-cli
npm-cli 作为是日常开发中接触最多部分,为我们提供了一些命令指令,查看提供指令方法可以使用
shell
npm help
或者使用
shell
npm -l
执行后可以看到 npm cli 提供的所有命令
Details
access, adduser, audit, bin, bugs, cache, ci, completion,
config, dedupe, deprecate, diff, dist-tag, docs, doctor,
edit, exec, explain, explore, find-dupes, fund, get, help,
hook, init, install, install-ci-test, install-test, link,
ll, login, logout, ls, org, outdated, owner, pack, ping,
pkg, prefix, profile, prune, publish, query, rebuild, repo,
restart, root, run-script, search, set, set-script,
shrinkwrap, star, stars, start, stop, team, test, token,
uninstall, unpublish, unstar, update, version, view, whoami
还可以通过 npm 代码去找到这些指令,因为npm 本质上就是通过node 触发的js 脚本,首先需要去找到我们本地安装 npm 的位置,
在 window 上可以在cmd执行 where npm
可以找到 ,在 linux 上执行 which npm
可以找到
以window 为例 在'node' 目录下如果你是windows用户可以 查看'npm.cmd' 文件
里面内容如图'脚本代码' ,通过这段脚本可以发现当在控制台输入'npm'的时候实际执行的命令为 'node \node_modules\npm\bin\npm-cli.js'
找到' \node_modules\npm\bin\npm-cli.js' 文件后如图'npm-cli.js' 打开'npm/bin/npm-cli.js'主要看下图这段代码,发现一段'npm.commands'变量调用,可以发现这个变量定义其中'npm' 这个变量是通过 "var npm = require('../lib/npm.js')" 引入的 找到 '/lib/npm.js' 文件找到变量'commands'这个
指令集合往上推大概在'node_modules\npm\lib' 文件下找到对应指令的js 文件,就可以发现如图'对应指令'