Node.js -基于Chrome V8 引擎的js运行的宿主环境,
-node.js支持ECMAStript 和 node模块Api
-npm与cpnm,nrm安装介绍
-npm是官方推出的包安装管理工具
-淘宝镜像 ----不需要翻墙,与外网连接,加快包的下载速度
npm install -g cnpm --registry=https://registry.npm.taobao.org
-node基础语法:
在命令窗口打印----先写node(将命令行工具变为类似于浏览器控制台,直接解析运行js代码)
输出按ECMAStript语法的js(node有ECMAstript模块)
-node.js全局对象 global(浏览器不支持global,支持globalThis,等价于window )
-clearInterval: [Function: clearInterval]
-clearTimeout: [Function: clearTimeout]
-setInterval: [Function: setInterval]
-setTimeout: [Function: setTimeout]
-(globalThis===global) 我们大多时候使用globalThis,兼容浏览器和node
Node.js一个强大的地方在于:超强的可扩展性。除了内置模块,自定义模块,还可以使用第三方模块安装对Node.js进行扩展。
前面说到模块化的三个问题:私有作用域、依赖关系管理和按需加载
一个模块就是一个js文件,文件外部只能通过文件的exports访问的机制解决了私有作用域问题。那么另外两个问题是如何解决的呢?
对于依赖关系的管理解决方案:npm。是不是很耳熟?没错,就是前端项目中常见的npm。它的作用就是将散落在各处的模块按照依赖关系重新组织起来。但npm的功能绝不仅仅于此,后续我们再详细展开讲。
对于按需加载,Node.js是在初始的时候一次性加载所有模块,对于使用过的模块就缓存起来,下次使用时再直接从缓存中读取,并且呢,由于Node.js运行在服务端,将文件从磁盘读取到内存中的速度是非常快的,因此,这个问题在Node中显得不那么突出。
小结:
1)Node.js中也有模块的概念,并且一个js文件就是一个模块;
2)每一个模块都有自己的作用域,在模块内部建立的全局变量和函数其他模块内无法访问,只有被导出的对象才能被其他模块访问。
3)模块的导出和引入遵循的是common.js模块规范,与前端模块规范是不同的。该规范解决了私有作用域和编码风格不统一问题。
4)模块类型按来源分可分为:内置模块、自定义模块和第三方扩展模块。
扩展知识:
Node.js是前端模块化的基础,webpack的模块化是建立在Node.js基础上的,因此,学webpack就会碰到Node.js,因此这也是为什么我要同时写Node系列和webpack系列的原因。