前言:
上篇 《Node.js简记》 安装Node.js并实现Helloworld 我们已经完成了node开发环境的安装配置,接下来我们先来了解一下node的一个重要的工具——包管理器npm
。
npm安装和常用指令:
1.npm简介:
npm
是node的包管理工具,常用于一下场景:
- 用户可从npm服务器获取别人编写的
第三方包
或命令程序
到本地使用; - 用户可上传自己编写的包或者命令程序到npm服务器给别人下载使用。
2.npm安装:
新版本的node安装的时候自动安装了npm,所以无需单独下载安装,检查是否安装成功可以通过如下指令:
$ npm -v
3.10.10
3.npm常用指令:
<name>
是指定的node的依赖包或者模块名称,例如express
等。
安装指令:
npm install <name>
全局安装:
npm install -g <name>
这里比上条多了
-g
参数,是global的意思,指一次安装全局可用,但是只能在命令行中全局使用,不能用通过require
的方式来调用全局包。例如:npm install -g hexo hexo -v
同步到Package.json的安装:
npm install -s <name>
假设项目路径下有
Package.json
这个文件,使用此指令安装包的时候,所安装包的信息会被同步写到Package.json
中。反向的,假如项目中有Package.json
文件,我们可以把当前项目使用到的依赖包信息都填写到其dependencies
字段中,这样在项目目录中运行npm install
就能把dependencies
字段所有的依赖包都安装到本地,如此在提交代码到github上的时候,也不必将node_modules
文件夹上传。初始化包管理:
npm init
执行这个指令会在项目目录下生成一个
Package.json
文件,这是包管理的配置文件,包含应用名称
、版本号
、依赖包
等信息。移除指定已安装的包:
npm remove <name>
更新指定已安装的包:
npm update <name>
列出已安装的包:
npm ls
查询安装包的路径:
npm root
查询全局安装包的路径:
npm root -g
查询帮助项:
npm help
也可以专门查询指定指令的帮助信息:
npm help install
4.npm加速:
由于npm默认的获取资源地址是国外的服务器,常常会出现速度慢而导致超时安装失败的错误,一般我们还是使用淘宝提供的cpm
npm install -g cnpm
cnpm install express
查询是否安装成功:
linsh@ubuntu:/application/node/express_demo$ cnpm -v
cnpm@4.5.0 (/home/linsh/git/nvm/versions/node/v6.10.3/lib/node_modules/cnpm/parse_argv.js)
npm@3.10.10 (/home/linsh/git/nvm/versions/node/v6.10.3/lib/node_modules/cnpm/node_modules/npm/lib/npm.js)
node@6.10.3 (/home/linsh/git/nvm/versions/node/v6.10.3/bin/node)
npminstall@2.30.0 (/home/linsh/git/nvm/versions/node/v6.10.3/lib/node_modules/cnpm/node_modules/npminstall/lib/index.js)
prefix=/home/linsh/git/nvm/versions/node/v6.10.3
linux x64 4.2.0-27-generic
registry=https://registry.npm.taobao.org
加载模块(包):
我们都知道node模块化的特性非常突出,而且各种第三方的功能模块都能通过node的包管理器npm
来获取,那么获取之后要如何引入到项目中呢?
1.required指令:
这就需要一个关键的指令require
,这里我们以简单的以node内带的 http
模块为例:
var http = require("http");
加载的包可以分为内部包
和外部包
,引入接口是一样的,加载顺序是:先从系统核心的模块中查找,再到当前项目的 node_modules
目录下查找。
2.node内置模块:
除了能够在服务端运行JavaScript之外,node本身也提供了诸如上述http
之类的一系列功能模块,用于与操作系统的交互,主要有:
- path:文件路径处理
- fs:操作文件系统
- child_process:新建子进程
- util:其他实用的小工具
- http:提供短连接Http服务器功能
- url:用于解析URL
- querystring:解析URL中的查询字符串
- crypto:提供加密和解密功能
- 其他
点击上述的模块名称可以查看对应的官方API
3.外部包的使用:
处理node核心自带的模块之外,其实在社区诞生了很多第三方的模块,这些模块通常都通过npm
进行管理,假如要使用它们,步骤如下:
下载包:
首先,我们要先通过npm
来获取外部包,在当前项目的目录下运行指令:npm install express
假如之前并未安装过外部包,在项目目录下会多出一个
node_modules
的文件夹,用于存放外部的包。加载包:
然后加载下载的外部包,加载包的方式其实与加载内部模块是一样的:var express = require("express");
通过
npm install -g <modulename>
全局安装的模块没办法通过此方式加载。
4.上传自己制作的包:
通过npm
我们不止可以获取别人编写的模块,还能上传我们自己编写的模块,当然需要符合npm
的规格,步骤如下:
创建包管理文件
package.json
:
在命令行中定位到当前创建的包目录,输入npm init
来生成包管理文件:E:\Node\projects\HappyWriter>npm init This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sensible defaults. See `npm help json` for definitive documentation on these fields and exactly what they do. Use `npm install <pkg> --save` afterwards to install a package and save it as a dependency in the package.json file. Press ^C at any time to quit. name: (HappyWriter) happywriter # 模块名 version: (1.0.0) description: writer editor # 模块描述 entry point: (index.js) test command: test git repository: # Github 地址 keywords: linshuhe author: linshuhe license: (ISC) About to write to E:\Node\projects\HappyWriter\package.json: # 生成地址 { "name": "happywriter", "version": "1.0.0", "description": "writer editor", "main": "index.js", "scripts": { "test": "test" }, "keywords": [ "linshuhe" ], "author": "linshuhe", "license": "ISC" } Is this ok? (yes) yes
输入
yes
->回车,此时在当前项目目录下会生成一个package.json
文件,内容为:{ "name": "happywriter", "version": "1.0.0", "description": "writer editor", "main": "index.js", "scripts": { "test": "test" }, "keywords": [ "linshuhe" ], "author": "linshuhe", "license": "ISC" }
Package.json 属性说明
- name - 包名
- version - 包的版本号
- description - 包的描述
- homepage - 包的官网 url
- author - 包的作者姓名
- contributors - 包的其他贡献者姓名
- dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下
- repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上
- main - main 字段是一个模块ID,它是一个指向你程序的主要项目。就是说,如果你包的名字叫 express,然后用户安装它,然后require(“express”)
- keywords - 关键字
在npm资源库注册用户:
使用邮箱来注册用户$ npm adduser Username: linshuhe Password: Email: (this IS public) linshuhe1@gmail.com
发布和撤回模块:
模块发布:npm publish
撤回指定版本的模块:
npm unpublish <package>@<version>
- 版号控制:
上述中在创建包管理文件的时候里面的字段version
用来进行包的版号控制,包含三位整数:X.Y.Z
,分别代表:主版本号、次版本号和补丁版本号,一下是更新版本号的原则:
- 如果只是修复bug,需要更新Z位;
- 如果是新增了功能,但是向下兼容,需要更新Y位;
- 如果有大变动,向下不兼容,需要更新X位。