JavaScript 命令行语言解析器

nodejs 使用了谷歌的 V8 JavaScript 解析器,而且没有浏览器对安全的限制,所以扩展了很多的库 (文件操作,网络操作,进程操作等)

特点是异步操作,因为 web 程序耗时于 IO 操作,不便同步,nodejs 放大了这个特点,所以性能很好

安装

安装 node 即可

nvm

对于多个版本,可以安装 nvm 版本管理工具,用来管理 node 的版本

  • 安装最新 node nvm install node

  • 安装某个版本 nvm install 6.14.4

  • 使用某个版本 nvm use v10.1.1

  • 列出版本 nvm ls

  • 列出远程 node 版本 nvm ls-remote

  • 卸载 nvm uninstall

  • 安装最近版本的 npm nvm install-latest-npm

模块

本来 javascript 刚开发的时候是做为脚本使用的,代码量少,所以没有提供模块。 现在脚本复杂了,就引入了模块的概念

原生语法 (import/export)

定义模块并导出模块的功能

1
  export const name = 'square';

导入功能到你的脚本

1
  import { name, draw, reportArea, reportPerimeter } from '/js-examples/modules/basic-modules/modules/square.mjs';

应用模块到你的 HTML

1
  <script type="module" src="main.mjs"></script>

库所支持的语法

node
导出
1
2
3
4
5
6
7
  let name={
      sayHello(){
          console.log("hello")
      }
  }

  module.exports=name
引入
1
  let module=require("MODULEPATH");

全局变量

  • __dirname:当前文件的目录

  • __filename:当前文件的绝对路径

  • console:控制台对象,可以输出信息

  • process:进程对象,可以获取进程的相关信息,环境变量等

  • setTimeout/clearTimeout:延时执行

  • setInterval/clearInterval:定时器

常用内置模块

path 模块

path 模块供了一些工具函数,用于处理文件与目录的路径

  • path.basename:返回一个路径的最后一部分

  • path.dirname:返回一个路径的目录名

  • path.extname:返回一个路径的扩展名

  • path.join:用于拼接给定的路径片段

  • path.normalize:将一个路径正常化

fs 模块

文件操作相关的模块

  • fs.stat/fs.statSync:访问文件的元数据,比如文件大小,文件的修改时间

  • fs.readFile/fs.readFileSync 异步/同步读取文件

  • fs.writeFile/fs.writeFileSync 异步/同步写入文件

  • fs.readdir/fs.readdirSync:读取文件夹内容

  • fs.unlink/fs.unlinkSync:删除文件

  • fs.rmdir/fs.rmdirSync:只能删除空文件夹,思考:如何删除非空文件夹?

  • fs.watchFile:监视文件的变化

stream 操作大文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
  // 读取大文件
  let readStream = fs.createReadStream("ideaIU-2018.1.5.win.zip");
  // 写入大文件
  let writeStream = fs.createWriteStream("a.zip");
  // let len = 0;
  // readStream.on("data", (chunk) => {
  //     len += chunk.length
  //     // console.log(chunk.length)
  //     writeStream.write(chunk)
  // })
  //
  // readStream.on("end", () => {
  //     console.log("文件读取完成," + len)
  // })

  readStream.pipe(writeStream)

http 模块

封装了 http server 和 client 的功能,就是说可以充当 server 处理请求,也可以发出请求。

events 模块

监听并触发事件

1
2
3
4
5
6
7
8
  var EventEmitter = require('events').EventEmitter;
  var event = new EventEmitter();
  event.on('some_event', function() {
      console.log('some_event 事件触发');
  });
  setTimeout(function() {
      event.emit('some_event');
  }, 1000);

url 模块

Buffer 类

util 模块

util 是一个 Node.js 核心模块,提供常用函数的集合,用于弥补核心 JavaScript 的功能 过于精简的不足。

OS 模块

提供了一些基本的系统操作函数。

Net 模块

Node.js Net 模块提供了一些用于底层的网络通信的小工具,包含了创建服务器/客户端的方法

DNS 模块

Node.js DNS 模块用于解析域名。

Domain 模块

Node.js Domain(域) 简化异步代码的异常处理,可以捕捉处理 try catch 无法捕捉的异常。

Web 模块

npm

npm 是 一家 管理 Javascript 项目为主的公司,同名的 npm 软件可以用来管理 js 项目

目录中包含以 * package.json* 作为文件名的项目一般视为 npm 项目,npm 中称呼为包。 包中对其他项目的引用放在 node_modules 中,叫做依赖

这里包和项目是一个意思,有些地方说包,有些地方说模块,我喜欢用项目

npm 功能

  • npm -v 显示版本号

  • npm init 新建项目

  • npm install 安装所有项目依赖

  • npm help 查看帮助信息

  • npm search 搜索项目信息

  • npm install 包名 (局部安装,安装在当前项目的 node_modules 目录下)

  • -g 全局安装

  • -D 安装并将依赖信息写在 package.json 中的 devDependencies 中

  • npm uninstall 卸载包

  • npm list 列出已安装依赖

  • npm outdated 检查过期依赖

  • npm update 更新依赖

  • npm root 查看依赖安装路径(也就是 node_modules 的路径)

  • npm view 查看模块的注册信息

    • xxx versions 列出 xxx 的所有版本

    • xxx dependencies 列出 xxx 的所有依赖, 如:npm view gulp dependencies

      1
      2
      
        npm install npm@latest -g
        npm config set registry https://registry.npm.taobao.org

      如果因为网络问题无法安装,可以使用 cnpm 安装

调试刷新

刷新 supervisor

安装 npm install -g supervisor
使用 supervisor app.js

调试 node debug

run 执行脚本,在第一行暂停
restart 重新执行脚本
cont, c 继续执行,直到遇到下一个断点
next, n 单步执行
step, s 单步执行并进入函数
out, o 从函数中步出
setBreakpoint(), sb() 在当前行设置断点
setBreakpoint(‘f()’), sb(…) 在函数 f 的第一行设置断点
setBreakpoint(‘script.js’, 20), sb(…) 在 script.js 的第 20 行设置断点
clearBreakpoint, cb(…) 清除所有断点
backtrace, bt 显示当前的调用栈
list(5) 显示当前执行到的前后 5 行代码
watch(expr) 把表达式 expr 加入监视列表
unwatch(expr) 把表达式 expr 从监视列表移除
watchers 显示监视列表中所有的表达式和值
repl 在当前上下文打开即时求值环境
kill 终止当前执行的脚本
scripts 显示当前已加载的所有脚本
version 显示 V8 的版本

远程调试

node --debug[=port] script.js
node --debug-brk[=port] script.js

Express 框架

使用 Express 可以快速地搭建一个完整功能的网站