包管理器NPM
安装依赖
npm常用命令
npm安装模块: npm install xxx
安装完成后当前目录下会出现node_modules/xxx目录。
但是这种会获取整个node_modules目录的方式并不提倡,而是提倡使用package.json来管理依赖模块,这样的方式有三个好处:
1.可以不需要将node_modules目录给别人。
2.方便进行依赖模块的版本管理,记录下当前的版本号
,以免以后模块版本更新后出现的依赖问题。
3.使用package.json,使用npm publish就可以将
其发布到NPM库中供所有人下载使用了。
package.json:
{ "name":"my-colors-pro",
"version":"0.01",
"dependencies":{
"colors":"0.5.0"
}
}
编写好package.json后,再执行npm install安装依赖模块。
- 全局安装:
目前的方式都是将依赖包下载到当前目录下,要全局安装时,可以为npm添加-g参数,一些命令行工具例如Web框架express,使用全局安装才能使用express命令去直接调用脚本创建项目。
通过npm config get prefix可以获取当前的全局安装目录,使用npm config set prefix “路径”来设置全局目录路径。
在package.json中添加”bin”:”./path/to/script”来发布此类可执行文件
由于网络访问量问题,推荐使用淘宝的NPM镜像cnpm,使用教程
浏览NPM仓库
查找某一个模块,或者需要发布模块时,都要查看某一模块是否存在于仓库,可以使用命令:
npm search NAME
该命令将搜寻name,tags,description字段,并返回匹配模块。
找到后使用view命令可以查看其package.json和NPM仓库相关属性:
npm view NAME
发布
使用npm publish就可以将发布到NPM库中,为了能够让node知道该载入哪个文件,我们可以在package.json中指定main属性,来让模块的API暴露出来:
"main":"./index"
可以使用npm help json来查看package.json的所有属性文档。
不想发布自己的模块时,可以在package.json中加入”private”:”true”来避免误发布。
require模块
1.引用模块
node使用require管理模块,类似import,如require(“http”)调用了自带的http模块。
var http = require("htpp")
2.创建模块
本地js文件即相当于一个模块,例如require("./server")
即是表示引入同目录下的server.js模块。
在模块(js文件中)使用exports.func = funcname
即可将本文件中的func函数提供给外部文件使用,其他文件通过funcname即可调用该函数。如:
server.js :
exports.start = start;
index.js :
var server = require("./server");
server.start();
1.http模块
包含http需要的相关方法,可以创建一个httpserver,处理request和response。
2.url模块
处理url,使用url.parse(request.url).pathname可以获取请求的相对url。
函数传递
node中可以将函数看做变量,即是可以将函数作为另一个函数的参数传递。
事件驱动
非阻塞
node是单线程执行程序,因为是单线程,所以我们要避免在编码中使用到阻塞操作,否则不仅仅是使用了阻塞代码的URL,整个服务端都会阻塞。
但同时,其所有行为都是并行的,这是因为node的所有耗时操作都是异步的,每个事件提供一个回调函数,当任务执行完毕时,使用callback来通知node执行结果。
比如exec函数,可以用起执行shell命令,但是当其执行后,node将直接执行下一条代码,而exec的shell执行结果将会在之后才回调。此时即便是耗时的操作,也不会阻塞到整个服务端。
因此,当要执行阻塞操作,比如,要在exec执行后,将其结果输出到web,就需要将输出到web的操作放到exec的回调函数中。
错误处理
如果在node中throw了未被捕获的错误时,进程就会崩掉。可以添加uncaughtException处理器来处理错误,并且需要每步都正确处理,以为在node中,捕获一个未来才会执行到的函数所抛出的错误是不可能的,这样出错之后很难追踪,因为上下文都已经丢失了。
常见API
fs
- 流(stream)
console.log的内部是将指定字符串加上\n后写到stdout流中。stdout位于process全局对象中。process包含了三个流对象:
stdin:标准输入
stdout:标准输出
stderr:标准错误