Node.js是我第一次接触后端开发,有些思想需要提炼出共性,以扩展到不同的语言,如Java与Python,甚至Go语言。这里只是基础介绍,后续会有Node.js进阶与框架Express实践,之后会学习其他语言的开发技术与框架(初步计划是成熟的Java框架,出名的Python,最新的Go都看一下),提炼一些重要的特点。
方法一:brew install nodejs
方法二(推荐):nvm 管理多个node版本
权限问题
https://docs.npmjs.com/getting-started/fixing-npm-permissions
单线程+异步模型,这是node的优势
理解setTimeout()和setInterval()函数的区别
推荐学习:
http://www.ruanyifeng.com/blog/2014/10/event-loop.html
如果某个函数需要回调函数作为参数,则回调函数是最后一个参数
回调函数本身的
第一个参数
,约定为上一步传入的
错误对象err
。如果没有发生错误则为null。只要判断回调函数的第一个参数,就知道有没有出错!这样还可以层层传递错误。
1 2 3 4 5 6
|
if(err) { if(!err.noPermission) { return next(err); } }
|
传统的错误捕捉机制try…catch对于异步操作行不通,所以只能把错误交给回调函数处理
常用的全局变量
global,用来定义共享变量
global.x = 1
process 进程控制与信息,下面介绍
console 控制台输出,生成环境不推荐使用
__filename
:指向当前运行的脚本文件名。
__dirname
:指向当前运行的脚本所在的目录。
require()
:用于加载模块。
setTimeout()
clearTimeout()
setInterval()
clearInterval()
Buffer()
:用于操作二进制数据。
伪全局变量
-
module
-
module.exports
-
exports
类似工具
,如python的pip,javascript前端的bower,java的maven(还有gradle,ant主要是编译,没有依赖管理)。
npm 与bower区别:NPM主要运用于Node.js项目的内部依赖包管理,安装的模块位于项目根目录下的node_modules文件夹内。而Bower大部分情况下用于前端开发,对于CSS/JS/模板等内容进行依赖管理,依赖的下载目录结构可以自定义。npm设计之初就采用了的是嵌套的依赖关系树,这种方式显然对前端不友好;而Bower则采用扁平的依赖关系管理方式,使用上更符合前端开发的使用习惯。
-
npm install xxx
-
—save 参数表示将该模块写入
dependencies
属性
-
-g
表示全局安装 ,默认安装在当前目录的node_modules下
-
npm search
-
npm run
-
可以通过该命令运行一下脚本,如执行测试,
npm run
会创建一个Shell,执行指定的命令,并临时将
node_modules/.bin
加入PATH变量,这意味着本地模块可以直接运行。(
也可用自己写makefile实现,参考nodeclub
)
-
以安装eslint为例
1 2 3 4 5 6 7 8 9 10 11
|
npm i eslint --save-dev
{ "name": "Test Project", "devDependencies": { "eslint": "^1.10.3" }, "scripts": { "lint": "eslint ." } }
|
运行上面的命令以后,会产生两个结果。首先,ESLint被安装到当前目录的
node_modules
子目录;其次,
node_modules/.bin
目录会生成一个符号链接
node_modules/.bin/eslint
,指向ESLint模块的可执行脚本。
npm run lint
的时候,它会自动执行
./node_modules/.bin/eslint .
。
-
start
和
test
属于特殊命令,可以省略
run
-
scripts 中 pre post 钩子
-
npm-run-all
-
live-server
自动更新目录下内容?类似gulp?
-
main
字段指定了加载该模块时的入门文件,默认是模块根目录下面的
index.js
。
-
scripts
指定了运行脚本命令的npm命令行缩写,比如start指定了运行
npm run start
时,所要执行的命令。
-
dependencies
字段指定了项目运行所依赖的模块
-
config字段用于向环境变量输出值
process.env.npm_package_config_port
1 2 3 4 5
|
{ "name" : "foo", "config" : { "port" : "8080" }, "scripts" : { "start" : "node server.js" } }
|
-
npm publish 发布模块到npm中,要先注册
-
npm link 生成模块的符号连接,指向其他模块,实现其他目录下模块代码的变化可以立刻反应过来。