前言
工作多久,就写多久的业务。没有深度,也没有广度。
在内卷已进入白热化的阶段,人口红利的影响下,增加技术深度和广度,才能延长职业寿命和收获更好的薪资待遇。
而第一步,就从node开始。
为什么要学习node?
node是前端架构的基石,npm就诞生于node社区。webpack等打包工具的运行环境也是node。学会node,才更容易理解vue-cli中一些api是如何实现的。
node是什么?
node并不是一门语言,而是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让js可以脱离浏览器,直接在各种场景下运行。
node的使用场景
node在项目中多作为中间层使用。
Node解决了哪些问题?
Node在处理高并发,I/O密集场景有明显的性能优势
- node适合i/o密集型:I/O密集指的是文件操作、网络操作、数据库
- 不适合cpu密集型:CPU密集指的是逻辑处理运算、压缩、解压、加密、解密
- node作为中间层:nginx开多线程=> node =>转发给java
- 生态好,webpack gulp都基于node
什么是同步异步和阻塞非阻塞?
- 同步就是在执行某段代码时,代码没有得到返回之前,其他代码无法执行,当得到了返回值后可以继续执行其他代码。
- 异步就是在执行某段代码时,代码不会立即得到返回结果,可以继续执行其他代码,返回值通过回调来获取
- 异步/同步指的是被调用方
- 阻塞/非阻塞指的是调用方
上面介绍完了一些概念后,我们直接进入代码阶段。
node基本知识
- node中没有
window
,而是global
- node为了实现模块化,在文件执行时,增加了匿名函数,
this
在这个函数中被更改 - 文件中的
this
不指向global
,而是一个空对象{}(即 module.exports)
可以使用
console.log(Objects.keys(global))
查看global上的属性
global上的process
process是在node应用执行期间一直存在的一个对象,该对象包含了当前进程执行的相关信息,并且可以通过process对其进行控制。
process上有哪些重要参数?
- platform:当前是什么环境 win32(微软) drain(苹果)
- argv:运行时传递的参数
- env:环境变量
- cwd:当前的工作目录
- nexttick
用node执行一个文件:
node 文件名 参数1 参数2
argv:node运行时传递的参数
argv有四个参数,前两个是固定的,没有用处
// 利用下面代码可以取到argv传递的参数
let obj = process.argv.slice(2).reduce((memo, b, i, arr) => {
if (b.includes('--')) {
memo[b.slice(2)] = arr[i + 1]
}
return memo
}, {})
console.log(obj);
// 在命令行用空格间隔,传递的参数就可以用argv接收
node test.js --config null --port 3000
{ config: 'null', port: '3000' } // 得到结果
上面这个例子我们看起来会非常眼熟,当我们在vue-cli中启动项目时,项目运行的端口等配置项,就是利用这个原理实现的。
env 环境变量
环境变量包含电脑的全局变量,也可以用以下语法设置临时变量。
语法:set NODE_ENV=development
console.log(process.env.NODE_ENV);
// 在命令行输入
set NODE_ENV=development
node test.js
//得到 development
上面这个例子也非常眼熟,在vue项目中经常使用
process.env.NODE_ENV
来判断当前是开发环境还是生产环境。
cwd:当前的工作目录
- process.cwd:node的参数,当前node在哪里执行的
- __dirname:在node环境下,每个文件中自带这个变量,值是当前文件的目录
通过这个变量可以知道在哪里运行的node服务
nextTick:微任务,只能在node里面用
node的事件环:每一个方法都有一个队列
node中的宏任务与微任务
- 宏任务:setImmediate setTimeout readFile
- 微任务:promise.then nextTick queueMicrotask
nextTick 并不属于node事件环,而是在本轮事件环执行后执行,在Promise之前执行
总结
以上就是node中的基本概念了,下一章会介绍node中模块相关的知识。
我是一个在前端已死的时代,不断在内卷中苦苦挣扎的大专生——天铭,希望和大家共同努力,只要我们足够努力,我们的老板就能早日过上自己想要的日子!