JavaScript in Node.js
Node.js 运行时中的 JavaScript 总览,解释宿主能力边界、服务端运行时能力与后续阅读主线。
#synthesis
#growing
#backend
#javascript
#nodejs
[!info] related notes
- 所属 MOC: Node.js MOC, JavaScript MOC
- 上位主题: JavaScript的工程化与运行时
- 相关概念: V8, libuv, commonjs-amd-umd, ES6 模块导入导出, Node.js 运行时架构, Node.js 事件循环阶段, Node.js MOC
- Node 核心模块: event-emitter, buffer, Stream, Worker 线程, package-json
- 并列概念: 浏览器中的 JavaScript
Node.js 下的 JavaScript
这篇笔记负责说明:JavaScript 离开浏览器后,在 Node.js 中获得了哪些新的宿主能力。
核心边界
- 语言层仍然是 JavaScript / ECMAScript
- 但没有 DOM、BOM、页面渲染
- 换成了文件系统、进程、网络、模块解析、服务端 I/O 等能力
推荐阅读顺序
你最需要先建立的边界
浏览器有、Node.js 没有
windowdocument- DOM / BOM
- 页面渲染
Node.js 有、浏览器没有
- 文件系统
- 进程对象
- 服务端网络能力
- CommonJS 历史模块系统
浏览器和 Node.js 都依赖,但都不等于它们自己的东西
也就是说,Chrome 和 Node.js 都可能使用 V8,但它们各自提供的宿主能力完全不同。
回到模块与调度
- 模块化主线:ECMAScript 模块模式
- 服务端事件循环:Node.js 事件循环阶段
- 浏览器与 Node 对照:JS 事件循环
与浏览器的对照入口
对照阅读:浏览器中的 JavaScript
如果要按知识地图分组浏览,去 Node.js MOC。
学习检查
不看正文回答:
- ECMAScript 与 Node.js Host Runtime 的边界是什么?
- 为什么 Node.js 没有 DOM,却拥有 fs、process、server-side networking 等能力?
- V8 与 libuv 分别在 Node.js Runtime 里承担什么角色?
- 为什么“Node.js 默认只有一条 JS 执行主线”不等于“整个 Node.js 只有一个线程”?
- CommonJS / ESM 属于语言、Node Host 还是模块加载体系中的哪一层?
- 给一段同时读文件、开 HTTP server、执行 Promise 的代码,指出语言能力与宿主能力分别来自哪里。