npm
npm是NodeJS默认的包管理工具,也是目前世界上最大的软件注册中心,安装NodeJS后npm通常也附带安装好了。npm主要用于管理JavaScript项目的依赖包,不仅是NodeJS,在浏览器客户端开发的前端项目中,我们也可以用npm来管理工程,npm有安装管理第三方模块、解决依赖、发布模块等功能。本文简单介绍一些npm的常见用法。
npm设置国内镜像
国内访问npm公共仓库是比较慢的,我们可以使用淘宝提供的公共npm镜像网站,在命令行中执行以下命令即可配置。
npm config set registry https://registry.npmmirror.com/
执行这条命令后,实际上会在~/.npmrc文件中写入以下内容。
registry = "https://registry.npmmirror.com/"
查看npm版本和帮助信息
npm -v:查看npm版本
npm help <command>:查看npm帮助,例如:npm help npm,查看全局帮助,npm help install,查看npm install的帮助
npm命令
安装模块(npm install)
更新npm自身到最新版
一个有趣的事实是npm本身也是由npm管理的,执行以下命令可以更新npm版本。
npm install -g npm
其中,npm install其实可以简写为npm i,因此更新npm也可以写作npm i -g npm。
同步项目依赖
在一个已有package.json的项目根目录里使用,执行以下命令会同步当前模块的所有依赖。
npm install
和之前类似,上面命令其实也可以简写为npm i。
安装新模块
npm中安装新模块有两种方式:
全局安装:安装到系统全局目录,将模块bin目录链接到系统可执行目录,用于全局使用的命令行工具安装。
npm install <module> -g
本地安装:安装到当前项目文件夹的node_modules目录,用于一些当前工程的依赖库安装。
npm install <module>
--save-dev:安装的同时将这个依赖项写到package.json里的devDependencies里,可以简写为-D,即npm i -D <module>--save:安装的同时将这个依赖项写到package.json里的dependencies里,自npm 5.0.0(2017年)起,--save已经是npm的默认行为,该参数可以省略
注意:有些npm包,既是框架又有命令行工具,有些包则分开打包,建议安装一个npm包前,先仔细阅读该包的使用文档,使用其推荐的安装方式,一般来说大部分都是采用用本地安装的。
查看已安装的模块(npm ls)
执行以下命令查看已安装的模块。
npm ls
如果你要检查全局模块,添加-g参数即可,即npm ls -g。
注意:如果你安装了很多模块,可能输出的列表非常长,因此可以用npm ls -g > list.txt将结果输出到文本文件。
查看模块注册信息(npm view)
执行以下命令查看模块注册信息。
npm view <module>
该命令会输出缓存中最新的模块信息,而不是本地已经安装的模块信息,本地已安装的版本信息npm list即可查看。有时npm view还会写作npm info,它们其实是同一个命令,后者是npm view的别名,作用的完全一样的。
卸载模块(npm uninstall)
执行以下命令可以卸载本地安装的模块。
npm uninstall <module>
和之前类似,需要卸载全局模块时可以添加-g参数。此外,开发中,我们如果想要删除工程中一个不用的依赖模块,另一种做法是在package.json中删除该模块依赖,然后执行npm install。
更新模块(npm update)
执行以下命令可以更新本地工程中已安装的模块。
npm update <module>
更新全局模块需要指定-g参数。
搜索模块(npm search)
执行以下命令可以根据关键字搜索模块。
npm search -l <pattern>
该命令会输出npm包缓存中所有包名和pattern匹配的模块,其中-l选项表示输出完整信息,不指定输出信息有很多省略号,可能不方便观看。不过在实际开发中,一般来说我们都很少直接用npm search,在npm官网和Github上搜索更加方便。
缓存(npm cache)
执行以下命令可以清空npm缓存。
npm cache clean
依赖安全审计(npm audit)
npm自带了可用性相当不错的安全审计工具,它可以扫描package.json和package-lock.json,对比漏洞数据库来检测项目中使用的依赖是否存在已知安全漏洞,执行以下命令即可检查当前项目的依赖。
npm audit
注意:如果你使用淘宝的镜像源,它是不支持audit接口的,因此你必须使用npm audit --registry=https://registry.npmjs.org/。
直接执行npm包命令 npx
npx是npm中自带的一个命令工具,它可以实现执行NodeJS包中的可执行文件,而无需先全局或本地安装该包(npx会将文件下载到一个临时目录执行,不会污染全局环境)。
npx <module> [其它参数]
运行scripts(npm run)
我们项目中的package.json通常会定义一些scripts,用于调用各种工具完成打包、测试等工作,这些命令可以用npm run启动,例如npm run dev表示调用dev这个scripts配置。
注意:npm run start可以简写为npm start。
发布模块
向npm官方仓库发布模块时,可以遵循以下步骤。
npm init:初始化package.json,根据CLI提示输入信息,即可自动创建package.jsonnpm adduser:创建npm账户,根据CLI提示,输入用户名、密码、邮箱信息npm publish:发布当前目录下的模块
注:如果要发布到公共npm仓库,我们需要在~/.npmrc中把国内镜象配置暂时删掉
如何删除node_modules
npm使用体验非常差,最大的问题就是它会在工程中下载数以万计的小文件,不仅安装奇慢,而且删除都删不掉,为了解决这个问题,我们可以使用rimraf这个npm包,它删除node_modules比系统命令更快,且兼容性好。执行以下命令可以删除巨大的无法删除的node_modules。
npx rimraf node_modules