最近在折腾 hexo 的更新,遇到了一些问题,正好使用 npm 进行包管理,顺便研究了下 npm 的一些经常使用命令html
NPM(node package manager),一般称为node包管理器。顾名思义,它的主要功能就是管理node包,包括:安装、卸载、更新、查看、搜索、发布等。node
npm的背后,是基于couchdb的一个数据库,详细记录了每一个包的信息,包括做者、版本、依赖、受权信息等。它的一个很重要的做用就是:将开发者从繁琐的包管理工做(版本、依赖等)中解放出来,更加专一于功能的开发。数据库
npm官网: https://npmjs.org/ npm官方文档: https://npmjs.org/doc/README.htmlnpm
咱们须要了解什么json
在具体介绍npm包的管理以前,咱们首先得来了解一下npm包的两种安装模式。bash
本地安装 vs 全局安装(重要) node包的安装分两种:本地安装、全局安装。二者的区别以下,后面会经过简单例子说明hexo
npm install pkg - 本地安装app
运行以下命令,就会在当前目录下安装 grunt-cli(grunt命令行工具)ide
npm install grunt-cli
安装结束后,当前目录下回多出一个node_modules目录,grunt-cli就安装在里面。同时注意控制台输出的信息:grunt
grunt-cli@0.1.9 node_modules/grunt-cli ├── resolve@0.3.1 ├── nopt@1.0.10 (abbrev@1.0.4) └── findup-sync@0.1.2 (lodash@1.0.1, glob@3.1.21)
简单说明一下:
grunt-cli@0.1.9:当前安装的package为grunt-cli,版本为0.19 node_modules/grunt-cli:安装目录 resolve@0.3.1:依赖的包有resolve、nopt、findup-sync,它们各自的版本、依赖在后面的括号里列出来
npm install -g pkg- 全局安装 上面已经安装了grunt-cli,而后你跑到其余目录下面运行以下命令
grunt
果断提示你grunt命令不存在,为何呢?由于上面只是进行了本地安装,grunt命令只能在对应安装目录下使用。
-bash: grunt: command not found
若是为了使用grunt命令,每到一个目录下都得从新安装一次,那不抓狂才怪。肿么办呢? 很简单,采用全局安装就好了,很简单,加上参数-g就能够了
npm install -g grunt-cli
因而,在全部目录下均可以无压力使用grunt命令了。这个时候,你会注意到控制台输入的信息有点不一样。主要的区别在于安装目录,如今变成了/usr/local/lib/node_modules/grunt-cli
,/usr/local/lib/node_modules/
也就是以前所说的全局安装目录啦。
grunt-cli@0.1.9 /usr/local/lib/node_modules/grunt-cli ├── resolve@0.3.1 ├── nopt@1.0.10 (abbrev@1.0.4) └── findup-sync@0.1.2 (lodash@1.0.1, glob@3.1.21)
npm的包管理命令是使用频率最高的,因此也是咱们须要紧紧记住并熟练使用的。其实无非也就是几个动做:安装、卸载、更新、查看、搜索、发布等。
安装最新版本的grunt-cli npm install grunt-cli
安装0.1.9版本的grunt-cli npm install grunt-cli@"0.1.9"
经过package.json进行安装 若是咱们的项目依赖了不少package,一个一个地安装那将是个体力活。咱们能够将项目依赖的包都在package.json这个文件里声明,而后一行命令搞定
npm install
其余package安装命令,运行以下命令,列出全部 npm install 可能的参数形式
npm install --help
输出以下,有兴趣的童鞋能够了解下
npm install <tarball file> npm install <tarball url> npm install <folder> npm install <pkg> npm install <pkg>@<tag> npm install <pkg>@<version> npm install <pkg>@<version range>
卸载grunt-cli 好比卸载grunt-cli npm uninstall grunt-cli
卸载0.1.9版本的grunt-cli npm uninstall grunt-cli@"0.1.9"
npm ls:查看安装了哪些包 运行以下命令,就能够查看当前目录安装了哪些package npm ls
输出以下
/private/tmp/npm └─┬ grunt-cli@0.1.9 ├─┬ findup-sync@0.1.2 │ ├─┬ glob@3.1.21 │ │ ├── graceful-fs@1.2.3 │ │ ├── inherits@1.0.0 │ │ └─┬ minimatch@0.2.12 │ │ ├── lru-cache@2.3.0 │ │ └── sigmund@1.0.0 │ └── lodash@1.0.1 ├─┬ nopt@1.0.10 │ └── abbrev@1.0.4 └── resolve@0.3.1
输出以下,一样,若是是要查看package的全局安装信息,加上-g就能够
npm ls pkg:查看特定package的信息 运行以下命令,输出grunt-cli的信息
npm ls grunt-cli
输出的信息比较有限,只有安装目录、版本,以下:
/private/tmp/npm └── grunt-cli@0.1.9
若是要查看更详细信息,能够经过npm info pkg,输出的信息很是详尽,包括做者、版本、依赖等。
npm info grunt-cli
npm update pkg:package 更新
npm update grunt-cli
npm search pgk:搜索 输入以下命令 npm search grunt-cli
返回结果以下
npm http GET http://registry.npmjs.org/-/all/since?stale=update_after&startkey=1375519407838 npm http 200 http://registry.npmjs.org/-/all/since?stale=update_after&startkey=1375519407838 NAME DESCRIPTION AUTHOR DATE KEYWORDS grunt-cli The grunt command line interface. =cowboy =tkellen 2013-07-27 02:24 grunt-cli-dev-exitprocess The grunt command line interface. =dnevnik 2013-03-11 16:19 grunt-client-compiler Grunt wrapper for client-compiler. =rubenv 2013-03-26 09:15 gruntplugin grunt-clientside Generate clientside js code from CommonJS modules =jga 2012-11-07 01:20 gruntplugin
这个命令我本身也还没实际用过,不误导你们,语法以下,也可参考官方对于package发布的说明https://npmjs.org/doc/developers.html:
npm publish <tarball> npm publish <folder>
npm的配置工做主要是经过npm config命令,主要包含增、删、改、查几个步骤,下面就以最为经常使用的proxy配置为例。
内网使用npm很头痛的一个问题就是代理,假设咱们的代理是 http://proxy.example.com:8080,那么命令以下:
npm config set proxy http://proxy.example.com:8080
因为npm config set命令比较经常使用,因而能够以下简写
npm set proxy http://proxy.example.com:8080
设置完,咱们查看下当前代理设置
npm config get proxy
输出以下:
http://proxy.example.com:8080/
一样可以下简写:
npm get proxy
删除proxy 代理不须要用到了,那删了吧
npm delete proxy
查看全部配置
npm config list
直接修改配置文件 有时候以为一条配置一条配置地修改有些麻烦,就直接进配置文件修改了
npm config edit
这货在官网彷佛没有详细的描述,其实就是包的描述信息啦。假设当咱们下载了node应用,这个node应用依赖于A、B、C三个包,若是没有package.json,咱们须要人肉安装这个三个包(若是对版本有特定要求就更悲剧了):
npm install A npm install B npm install C
有了package.json,一行命令安装全部依赖。
npm install
字段至关多,但最重要的的是下面几个
在package.json里,你常常会在包名后看到相似"~0.1.0"这样的字符串,这就是包的版本啦。下面会列举最多见的版本声明形式,以及版本书写的要求:
常见版本声明形式
a、"~1.2.3" 是神马意思呢,看下面领悟 "~1.2.3" = ">=1.2.3 <1.3.0" "~1.2" = ">=1.2.0 <1.3.0" "~1" = ">=1.0.0 <1.1.0" b、"1.x.x"是什么意思呢,继续自行领悟 "1.2.x" = ">=1.2.0 <1.3.0" "1.x.x" = ">=1.0.0 <2.0.0" "1.2" = "1.2.x" "1.x" = "1.x.x" "1" = "1.x.x"
版本书写要求 版本能够v开头,好比 v1.0.1(v只是可选) 1.0.1-7,这里的7是所谓的“构建版本号”,不理是神马,反正版本大于1.0.1 1.0.1beta,或者1.0.1-beta,若是1.0.1后面不是 “连字符加数字” 这种形式,那么它是pre release 版本,即版本小于 1.0.1 根据b、c,有:0.1.2-7 > 0.1.2-7-beta > 0.1.2-6 > 0.1.2 > 0.1.2beta 写在后面
内容只是简单地把最多见的命令,以及一些须要了解的内容列了出来。如要进一步了解,可参考官网说明。此外,npm help是咱们最好的朋友,若是忘了有哪些命令,命令下有哪些参数,可经过help进行查看。