Appearance
node.js
元信息
- 目标:理解 V8 引擎脱离浏览器宿主后 JS 成为通用语言——Node 的组成(引擎/系统API/Web服务器/npm)与用途;分清浏览器 JS 与 Node JS 同语言、不同运行时
- 关键概念:V8、Node.js、运行时、系统API、同构、npm
- 关联阶段:cp3
- 常见误区:以为 Node 是"另一个 JavaScript 语言"(同一语言,不同运行时与 API 集);以为 Node 里也能操作 DOM(DOM 是浏览器提供的,Node 提供的是文件系统/进程等系统 API);以为前端工程师用不到 Node(构建工具链、脚手架、转译全跑在 Node 上)
问题:浏览器里的JS
- 不能脱离浏览器运行
- 只能调用浏览器支持的API,不能调用底层操作系统的API,如进程管理、文件系统、网络等,从而失去了诸多能力或可能
安全,所以受限
Javascript 引擎
Javascript作为一种脚本语言,它的解释器被称为 Javascript 引擎,一般内置于浏览器。
- JScript(IE6,IE7, IE8)
- Chakra(IE9,IE10, IE11, IE Edge)
- SpiderMonkey(Firefox)
- JavascriptCore(Safari)
- V8(chrome)
V8 引擎
- 当下最为优秀的 Javascript 引擎,最初内置于 Google Chrome 浏览器之中
- 后来与浏览器宿主分离,可独立运行
- 采用开源协议,从而被广泛地移植或嵌入到各种环境,如 NodeJS、MongoDB、CouchDB、photoshop、网络游戏等 等各种环境,从而将Javascript语言成功的推广到了各种环境之中,从脚本语言向全功能的程序设计语言进化
类似的运行时还有 deno、bun 等(它们与 node 同类,各自内置 JS 引擎) https://zhuanlan.zhihu.com/p/676156364
node.js
是javascript生态的基础设施,包含一系列基础组软件:
- V8引擎:可独立运行的Javascript执行环境,
- 系统API和核心库:提供对底层操作系统能力的一组调用接口
- Web开发能力:内置 http 等模块,可搭建 Web 服务器(扮演 apache 一类的角色),并提供一组基于javscript的Web服务开发框架和功能,如异步、事件等机制,帮助程序员快速开发服务端应用。
- 模块与包管理工具:提供模块化机制和基于包(package)的管理工具,即npm
node.js的出现,使得基于js开发的应用无需浏览器这一宿主环境,可直接进行底层系统调用,使得Javascript演变成为功能完整的编程语言,被广泛用于各种平台。
node初体验 hello world!
在系统中安装node运行环境后,在控制台命令行中输入下面的代码,将看到屏幕显示 'hello world!'
bash
node hello.jsnode.js的用途
- 支持多种界面的前端应用开发: Web、命令行、甚至桌面(electronjs)
- 命令行应用如vue/react等框架的代码生成器
- 桌面应用如编辑器vscode、atom等
- 同构应用
- node.js实现了Javascript从前端到后端的跨越,不仅在前端一统天下,而且在后端也逐步蚕食java/php/net等服务器语言的地盘
- node.js 避开了多版本浏览器的兼容性问题,可以不断支持javascript新语法特性
前端开发中的node.js
在本教程中,我们并不介绍基于 node.js 的服务端编程,而是借用node.js的包管理工具,来提升我们完成浏览器应用的代码重构和开发效率
- 将es6+等高级语法转译为低级语法,从而即享用最新特性又无需考虑浏览器兼容性问题
- 利用npm等包管理工具,方便代码依赖的管理
- 利用node生态中的各种工具,提高前端开发效率
node.js应用 Vs 浏览器应用
- 浏览器应用:plain javascript、v8、浏览器api(DOM、BOM、H5 api)
- node.js应用:ES6+、v8、系统api
- 服务端应用:类似php、jsp、asp等
- 命令行应用:终端下执行
- 桌面应用:通过 Electron 等打包,由浏览器内核提供UI,node.js提供访问本地系统的api
在最新的现代浏览器中,已经可以直接使用ES6语法,但考虑到兼容旧浏览器,依然需要一个转译
参考阅读
- 入门 https://mp.weixin.qq.com/s/fLNzEyfxsZDiBU5E5iYkKw
- https://www.nodebeginner.org/index-zh-cn.html
- node中文文档 https://www.nodeapp.cn/
- https://blog.risingstack.com/node-hero-tutorial-getting-started-with-node-js/
- https://glitch.com/#!/project/node-beginner
- Node.js 和前端 JavaScript 的区别 https://zhuanlan.zhihu.com/p/272612960
- JavaScript是如何工作的:引擎,运行时和调用堆栈的概述! https://zhuanlan.zhihu.com/p/61928434
- quickjs
- 最小的V8 https://zhuanlan.zhihu.com/p/674740717