
欢迎来到Bokey的空间🌼
加载中...
npm - Node包管理器🗃
Node的包管理器,它是Node.js默认的,以JavaScript编写的软件包管理系统,用npm来分享和使用代码已经成了前端的标配,这里会介绍它的基本用法

简介
NPM( Node Package Manager),简称Node包管理工具;它是Node.js
默认的,以JavaScript
编写的软件包管理系统,用npm
来分享和使用代码已经成了前端的标配;npm
被全球超过1100万开发人员所依赖,拥有超过一百万个软件包,是世界上最大的软件注册表;
因此,拥有了NPM,相当于拥有了超过一百万个软件包
安装
在安装完Node.js后,npm是附带安装的(内置的);但我们需要配置一些npm相关的配置,如npm的全局安装模块的位置和缓存路径,以及加快下载的镜像等
修改全局模块下载路径/缓存路径
- 在Node.js的目录(我的目录 :
D:\MyDownload\nodeJS
)下,创建node_global(全局模块)和node_cache(全局缓存)文件夹

- 在该目录打开cmd控制台,输入命令进行配置:
shell
# 全模块路径配置:
# npm config set prefix 创建的node_global文件夹所在路径
npm config set prefix "D:\MyDownload\nodeJS\node_global"
--------------------------------------------------------
# 缓存路径配置:
# npm config set cache 创建的node_cache文件夹所在路径
npm config set cache "D:\MyDownload\nodeJS\node_cache"
- 修改系统环境变量
创建系统变量NODE_HOME
,变量值为Node.js
的下载路径
然后系统变量的Path中,添加刚刚配置的%NODE_HOME%
(将原来的绝对路径覆盖),如下图:
在用户变量的Path中,添加全局模块路径
随后安装express包测试一下
shell
npm install express -g
然后在相应路径看是否下载有该包
注:若执行命令出现如下报错
是由于权限的原因,右击Nodejs文件夹 -> 属性 -> 安全,点击编辑,将所有权限都✅即可
如果还不行,就试试将node_cache和node_global文件夹都进行上面的权限✅,就可以了
更换npm源为淘宝镜像
npm 默认的registry为https://registry.npm.taobao.org
,也就是下载 npm 包时是从国外的服务器下载,在国内下载很慢;因此我们一般在国内使用淘宝的镜像来下载,使用命令:
shell
npm config set registry https://registry.npm.taobao.org/
再使用命令
shell
npm config get registry
查看是否配置成功
全局安装基于淘宝源的cnpm
由于npm的服务器在海外,所以访问速度比较慢,访问不稳定 ,cnpm的服务器是由淘宝团队提供 服务器在国内cnpm是npm镜像,一般会同步更新,相差在10分钟,所以cnpm在安装一些软件时候会比较有优势;但是一般cnpm只用于安装时候,所以在项目创建与卸载等相关操作时候我们还是使用npm;命令:
shell
npm install -g cnpm --registry=https://registry.npm.taobao.org
查看是否下载成功:
shell
cnpm

使用
npm升级,信息查询
当下载好Node后我们就可以使用npm命令进行包的管理,查看npm版本:
shell
npm -v # 查看npm版本
npm help # 查看 npm 命令列表
npm -l # 查看各个命令的简单用法
npm config list -l # 查看 npm 的配置
安装最新版本的npm:
shell
npm install npm -g # Window 系统使用这个命令
sudo npm install npm@latest -g # Linux 命令
注意:npm install npm@latest -g 安装完之后,如果报错( 报找不到 npm ),可以再执行 curl -L https://npmjs.com/install.sh | sh
即可
npm init初始化package.json文件
在项目中引导创建一个 package.json 文件,安装包的信息保存到项目的 package.json 文件中,以便后续的其它的项目开发或者他人合作使用,因此,package.json 在项目中是必不可少的
shell
npm init # 初始化package.json文件,但会提问一系列问题,如果觉得不用修改默认配置,一路回车就可以了
npm init -y # 直接用默认的配置初始化package.json文件(-f,-force,-yes都是一样的)
- 作用:用于记录项目依赖,记录当前状态下项目中实际安装的各个 package 的版本号、模块下载地址、及这个模块又依赖了哪些依赖
- 结构:
- name:项目名,也就是在使用npm init 初始化时取的名字,但是如果使用的是npm init -y 快速初始化的话,那这里的名字就是默认存放这个文件的文件名
- version:版本号
- private:希不希望授权别人以任何形式使用私有包或未发布的
- scripts-serve:是vue的项目启动简写配置
- scripts-build:是vue的打包操作简写配置
- dependencies:指定了项目运行时所依赖的模块
- devDependencies:指定项目开发时所需要的模块,也就是在项目开发时才用得上,一旦项目打包上线了,就将移除这里的第三方模块
package.json文件中版本号说明,安装时代表不同含义: 5.0.3
表示安装指定的5.0.3
版本~5.0.3
表示安装5.0.X
中的最新版本^5.0.3
表示安装5.X.X
中的最新版本
package-lock.json文件
该文件在使用npm install ...时生成
- 作用:用于记录当前状态下项目中实际安装的各个 package 的版本号、模块下载地址、及这个模块又依赖了哪些依赖
- 结构:
name
:项目名,也就是在使用npm init 初始化时取的名字,但是如果使用的是npm init -y 快速初始化的话,那这里的名字就是默认存放这个文件的文件名version
:版本号private
:希不希望授权别人以任何形式使用私有包或未发布的scripts-serve
:是vue的项目启动简写配置scripts-build
:是vue的打包操作简写配置dependencies
:指定了项目运行时所依赖的模块devDependencies
:指定项目开发时所需要的模块,也就是在项目开发时才用得上,一旦项目打包上线了,就将移除这里的第三方模块
为什么有了
package.json
,还需要package-lock.json
文件呢?
当项目中已有package-lock.json
文件,在安装项目依赖时,将以该文件为主进行解析安装指定版本依赖包,而不是使用 package.json 来解析和安装模块
因为package
只是指定的版本不够具体,而package-lock
为每个模块及其每个依赖项指定了版本,位置和完整性哈希,所以它每次创建的安装都是相同的
无论你使用什么设备,或者将来安装它都无关紧要,每次安装都应该给你相同的结果
npm root查看包的安装路径
shell
npm root [-g] # 查看包的安装路径
npm config管理npm的配置路径
基本语法:
shell
npm config set <key> <value> [-g|--global] # 设置配置
npm config get <key> # 得到配置
npm config delete <key> # 删除配置
npm config list # 查看所有配置
npm config edit # 打开配置文件,编辑配置
npm get <key> # 查看配置
npm set <key> <value> [-g|--global] # 设置配置
常用命令:
命令指定使用 npm init时,生成的 package.json文件的字段默认值
shell
npm config set init.author.name $name # 设置npm init时,package.json文件的作者名属性
npm config set init.author.email $email # 设置npm init时,package.json文件的邮箱属性
设置代理示例:在公司内网,因为公司的防火墙原因,无法完成任何模块的安装时,可以执行下面命令
shell
npm config set proxy=http://xxx
npm cache管理模块缓存
最常用的就是清理缓存命令:
shell
npm cache clean
npm set设置环境变量
npm set用来设置环境变量
shell
# 设置作者名
npm set init-author-name 'Your name'
# 设置邮箱
npm set init-author-email 'Your email'
# 设置url
npm set init-author-url 'http://yourdomain.com'
# 设置许可证
npm set init-license 'MIT'
# 为 npm init 设置了默认值,以后执行 npm init 的时候,package.json 的作者姓名、邮件、主页、许可证字段就会自动写入预设的值
这些信息会存放在用户主目录的 ~/.npmrc文件,使得用户不用每个项目都输入。如果某个项目有不同的设置,可以针对该项目运行 npm config
npm info查看模块信息
查看模块信息:
shell
npm info # 模块名
例:
npm search搜索npm模块
搜索模块:
shell
npm search /*搜索词*/
npm list列出安装模块
以树形结构列出当前项目安装的所有模块,以及它们依赖的模块:
shell
npm list # 注意:这个是列出本地( 即当前目录 )安装的模块
npm list -global # 加上 global 参数,会列出全局安装的模块
npm ls -g # 查看全局安装的模块及依赖
npm list underscore # npm list 命令也可以列出单个模块
例:
npm install安装模块
安装模块常用命令:
shell
# 安装模块到当前目录下
npm install # 模块名
# -g 的意思是将模块安装到全局,具体安装到磁盘哪个位置,要看 npm config prefix 的位置
npm install -g # 模块名
# -save 的意思是将模块安装到项目目录下,并在package文件的dependencies节点(运行时依赖)写入依赖
npm install -save # 模块名
# 附:--save:模块名将被添加到 dependencies,可以简化为参数 -S。
# -save-dev 的意思是将模块安装到项目目录下,并在package文件的devDependencies(开发时依赖)节点写入依赖
npm install -save-dev # 模块名
# 附:--save-dev:模块名将被添加到 devDependencies,可以简化为参数 -D
全局模块和本地模块的区别:
- 全局模块所有项目都可以使用,本地模块只有当前项目可以使用
- 一般全局模块都是一些命令包,在全局模块容易导致版本冲突,不能在js中通过require调取使用
- 安装在本地模块不能直接的使用命令操作(安装在全局可以使用命令)
附:
安装在全局目录下的模块,大部分都会生成一个xxx.cmd的文件,只要有这个文件,那么xxx就是一个可执行的命令(例如yarn.cmd =>yarn 就是命令)
npm uninstall卸载模块
卸载模块:
shell
# 卸载该项目模块
npm uninstall /*模块名*/
# 卸载全局模块
npm uninstall -g /*模块名*/
# 卸载开发版本模块
npm uninstall --save-dev /*模块名*/
npm update更新模块
更新模块
shell
# 升级当前项目的指定模块
npm update # 模块名
# 升级全局安装的模块
npm update -g # 模块名
它会先到远程仓库查询最新版本,然后查询本地版本。如果本地版本不存在,或者远程版本较新,就会安装;使用-S
或 --save
参数,可以在安装的时候更新 package.json
里面模块的版本号
JavaScript
// 更新之前的package.json
dependencies: {
dep1: "^1.1.1"
}
// 更新之后的package.json
dependencies: {
dep1: "^1.2.2"
}
注意,从 npm v2.6.1 开始,npm update
只更新顶层模块,而不更新依赖的依赖,以前版本是递归更新的。如果想取到老版本的效果,要使用下面的命令
shell
npm --depth 9999 update
npm outdated检查模块是否过时
检查模块是否过时:
shell
npm outdated
输入命令后会显示模块最新的版本信息
npm run调用script
npm不仅可以用于模块管理,还可以用于执行脚本。package.json
文件有一个 scripts
字段,可以用于指定脚本命令,供 npm直接调用
JSON
{
"script":{
"dev": "vue-cli-service serve --mode dev --port 8080"
}
}
package.json
文件中的字段script
的每一个属性都是一个自定义的脚本命令。
在命令行中可以通过执行npm run dev
来执行这段脚本
发布于
2025-05-14
更新于
2025-10-10
类目
作者
Bokey
版权协议