node.js
问题:浏览器里的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语言成功的推广到了各种环境之中,不再局限于浏览器
node.js
是一组软件的集合:
- V8引擎:可独立运行的Javascript执行环境,
- 系统API和核心库:提供对底层操作系统能力的一组调用接口
- Web服务器:实现了一个标准的Web服务器(如apache),并提供一组标准的基于javscript的Web服务开发框架和功能,如异步、事件等机制,帮助程序员快速开发服务端应用。
- 模块与包管理工具:提供模块化机制和基于包(package)的管理工具
node.js的出现,使得基于js开发的应用无需浏览器这一宿主环境,可直接进行底层系统调用,使得Javascript演变成为功能完整的编程语言,被广泛用于各种平台。
node初体验 hello world!
// 编辑一个hello.js文件
print('hello world');
在系统中安装node运行环境后,在控制台命令行中输入下面的代码,将看到屏幕显示 'hello world!'
node hello.js
node.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)[https://www.electronjs.org]等打包,由浏览器提供UI,node.js提供访问本地系统的api
在最新的现代浏览器中,已经可以直接使用ES6语法,但考虑到兼容旧浏览器,依然需要一个转译
参考阅读
- 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