npm常用命令
install 安装
安装一个node工具包。安装之前,npm会先检查node_modules目录之中是否已经存在指定模块。如果存在就不再安装,即使远程仓库已经有了一个新版本也是。如果要重新安装可以带上参数-f
。如果node_modules不存在指定模块,则向registry查询模块压缩包的网址,然后下载压缩包并放至缓存目录,最后解压压缩包到当前项目的node_modules目录。
- 别名:
npm i
、npm add
。 - 参数:
[-P|--save-prod|-D|--save-dev|-O|--save-optional] [-E|--save-exact] [-B|--save-bundle] [--no-save] [--dry-run]
语法
npm install <name>|[<@scope>/]<name>|[<@scope>/]<name>@<tag>|[<@scope>/]<name>@<version>|[<@scope>/]<name>@<version range>|<git-host>:<git-user>/<repo-name>|<git repo url>|<tarball file>|<tarball url>|<folder>
参数说明
-P
,--save-prod
:安装包将出现在你的dependencies中。这是默认值,除非存在-D
或-O
。-D
,--save-dev
:安装包将出现在你的devDependencies中。-O
,--save-optional
:安装包将出现在你的optionalDependencies中。--no-save
:不保存在依赖中。-f
,--force
强制重新安装。
如:
npm i ijijin_builder -P
并且,当使用上述任何选项将依赖包保存到package.json时,有两个可选参数:
-E
,--save-exact
:保存的依赖包将配置为精确的版本,而不是使用NPM的默认semver range运算符。-B
,--save-bundle
:保存依赖包的同时将添加你的bundleDependencies列表。
当然,如果有npm-shrinkwrap.json 或 package-lock.json的话,也会更新它们。
<scope>
是可选的,作用是将从与指定作用域关联的注册表下载包。如果没有与给定范围关联的注册表,则假定为默认注册表。
注意:如果你没有在scope名字里写入@符号,NPM将把它解释为一个Github存储库,参见下面。作用域名称后面还必须跟一个斜杠。
如:
npm install sax
npm install githubname/reponame
npm install @myorg/privatepackage
npm install node-tap --save-dev
npm install dtrace-provider --save-optional
npm install readable-stream --save-exact
npm install ansi-regex --save-bundle
全局模式:-g
或--global
生产模式:--production
如果通过--production
参数或NODE_ENV环境变量设置为production时,npm将不会安装devDependencies的安装包列表。
注意:在项目中安装dependency时
--production
参数无效。
update 更新
缓存目录
执行npm install或npm update命令后,从registry下载的压缩包都存放在本地的缓存目录。
在Linux或Mac上,这个缓存目录默认是在用户主目录下的.npm
目录;
在windows下默认是%AppData%/npm-cache
目录。
通过配置命令可以查看这个目录的位置:
npm config get cache
清除缓存目录
直接删文件夹或
npm cache clean
设置缓存时间
npm提供了一个参数--cache-min
,用于从缓存目录安装模块,该参数指定一个时间,单位为分钟。只有超过这个时间的模块才会从registry下载。如
npm instatll --cache-min 9999 fundcharts
run-script 运行任意包脚本
别名:npm run
语法
npm run-script <script name>
run-script将从包的“scripts”对象运行任意命令。如果没有提供“命令”,它将列出可用的脚本。run[-script]
被用作test、start、restart和stop等命令,不过也可以直接调用。当包中的脚本打印出来时,它们被分为生命周期(测试、启动、重新启动)和直接运行脚本。
从[email protected]开始,在执行脚本时可以使用自定义参数。getopt使用特殊选项–来分隔选项的结尾。NPM将把后面的所有参数直接传递给脚本如:
npm run test -- --grep="pattern"
参数将只传递到NPM运行后指定的脚本,而不传递到任何前脚本或后脚本。
env脚本是一个特殊的内置命令,可用于列出运行时脚本可用的环境变量。如果在包中定义了“env”命令,它将优先于内置命令。
除了shell预先存在的路径之外,npm run还将node_modules/.bin添加到提供给脚本的路径中。本地安装的依赖项提供的任何二进制文件都可以不使用node_modules/.bin前缀。例如,如果您的包中有一个devdependency on tap,那么您应该编写
"scripts": {"test": "tap test/\*.js"}
来代替
"scripts": {"test": "node_modules/.bin/tap test/\*.js"}
来运行你的test脚本。
运行脚本的实际shell依赖于平台。默认情况下,在类Unix系统上,它是/bin/sh命令,在Windows上是cmd.exe。/bin/sh引用的实际shell也取决于系统。从[email protected]开始,可以使用脚本shell配置自定义shell。
脚本从模块的根目录运行,无论调用NPM RUN时当前的工作目录是什么。如果希望脚本根据所处的子目录使用不同的行为,则可以使用init_cwd环境变量,该变量保存运行npm run时所处的完整路径。
npm run将node环境变量设置为执行npm的节点可执行文件。此外,如果传递了–scripts prepend节点路径,则节点所在的目录将添加到路径中。如果传递了–scripts prepend node path=auto(这是NPM v3中的默认值),则只有在路径中找不到该节点可执行文件时才会执行此操作。
参数:
--silent
:防止显示NPM出错时输出。--if-present
:来避免在未定义脚本时使用非零退出代码退出。这样可以在不破坏执行链的情况下运行可能未定义的脚本。
list 查看安装
语法
npm list
package-lock.json
package.json文件只能锁定大版本,也就是版本号的第一位,并不能锁定后面的小版。package-lock.json 是在 npm install
时候生成一份文件,用以记录当前状态下实际安装的各个npm package的具体来源和版本号。
安装包前置
包下载的前置知识
一个包的版本号基本由三位数字构成 x.x.x, 它们分别是 Major(主版本号), Minor(次版本号), Patch(修订号)。
*
: 升级 Major + Minor + Patch;^
: 升级 Minor + Patch;~
: 升级 Patch;
比如^4.3.1
表示 4.x.x 的最新版,~4.3.1
表示 4.3.x 的最新版
prune 清理模块
使用情景:开发工程中可能使用了某些三方模块(node_modules目录下),后来又不用了,prune则可以清除这些不再需要的文件。
语法
npm prune
prune原理是根据package.json里的依赖项来判断是否删除。
ci 用“干净”状态安装项目
npm 在v5.7.1
起支持。
语法
npm ci
npm ci相比npm install下的区别:
- 1.项目必须含一个package-lock.json或npm-shrinkwrap.json文件
- 2.如果package-lock中的依赖于package.json中不匹配的话,执行命令会报错并退出执行
- 3.如果node_modules已经存在,它将在执行前删除
- 4.它永远不会改写package.json或package-lock.json