node学习笔记(一)

Node

node是使用C++、C、js(给js本身调用时提供的一些api)等编写的

node的核心层:libuv是由C编写的库;底层通过对操作系统的一些调用由中间层libuv来完成

libuv提供了事件循环、文件系统读写、网络IO、线程池等等内容

Node架构

node架构图

Node应用场景

  • 前端开发的库都是以node包的形式进行管理;
  • npm,cnpm、yarn、pnpm成为前端开发使用最多的工具;
  • 使用Nodejs作为web服务器开发、中间件、代理服务器;
  • 大量项目需要借助Node.js完成前后端渲染的同构应用;(SSR)
  • 资深前端工程师需要为项目编写脚本工具;(前端工程师编写脚本通常会使用JavaScript)
  • 很多企业在使用Electron来开发桌面应用程序;(Electron是基于Node的并且需要Node环境)

Node版本管理

macOS:n/nvm

1
2
3
4
5
6
7
8
npm i -g n
n --version
// 安装最新的稳定版本
n lts
// 安装最新的版本
n latest
// 查看所有的版本
n

window:nvm-windows

1
2
3
4
5
6
// 安装最新的node版本n
nvm install latest
// 罗列目前安装的所有版本
nvm list
// 版本切换(需要管理员权限)
mvn use

Node的输入和输出

process(输入)

  • process(进程对象)可用来获取用户终端输入

示例:

在终端输入

1
node test.js 10 20

test.js文件代码如下

1
2
3
4
5
6
7
8
9
10
11
// argv=>arguments vector
console.log(process.argv);
// [ 'D:\\nvmNode\\node.exe', 'F:\\myBlog\\test.js', '10', '20' ]
// 第一个参数是当前node所在的文件夹,第二个参数是需要运行的js文件,之后的参数是用户的输入
let [, , str1, str2] = process.argv;
console.log((str1 + str2).length);
// 4

// 其他应用应用场景
// 以下命令可以让webpack来判断当前所处的是开发环境还是生产环境
node ./webpack.config.js env=development

process还能够查看系统的其他一些信息:操作系统类型node版本V8的版本等。

其他方法:

1
process.nextTick()

console(输出)

1
2
3
4
// 清空控制台
console.clear();
// 输出调用栈
console.trace()

Node全局对象

特殊的全局对象

__dirname__filenameexportsmodulerequire()

这些全局对象是模块中的变量,只是每个模块都有,看起来像全局变量,但是在命令行交互是不能使用的。

  • __dirname:表示当前文件所在的目录;
  • __filename:表示当前文件所在的目录以及文件名;

注意:

1
module.exports === exports

定时器函数

1
2
3
4
5
setTimeout
setInterval
setImmediate
// 添加到下一次的tick队列
process.nextTick

global对象

在node环境下,全局对象为global;在浏览器环境下,全局对象为window;在后来的版中,使用统一的名称globalThis作为全局对象,在浏览器环境指向this,在node环境指向global

说明:使用var声明的变量在浏览器环境下会自动加入到window的一个属性中,在node环境下不会。