一、_nodejs基本介绍
官方概念:Node.js® 是一个基于 Chrome V8 引擎 的 JavaScript 运行时
(Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.)
上面的概念中有两个特殊的名词,解释如下:
1.chrome V8引擎: chrome浏览器用来解析和执行js代码的工具;
2.运行时:理解为一个容器,用来运行代码的环境;
所以,对Node.js更通俗的解释是:一个用chrome浏览器V8引擎来跑JS代码的环境。
二、在Node环境下运行js代码
在小黑窗中直接跑代码运行这个文件
1.打开命令行工具(请注意当前所处的位置),输入命令
2.格式: node 要执行的文件的路径
注意:node 的后面有一个空格 nodejs就是一个环境。可以跑代码的环境
三、Node.js和浏览器端的区别
1.在浏览器端
js由三部分组成:ECMAScript + BOM + DOM
2.在nodejs端
有ECMAScript + 内置模块(fs, http, path,.....)。在nodejs中是没有BOM、DOM、window,但使用ECMAScript是通用的
区别
相同点:
都是可以运行js代码的容器,更严格一点说:都可以运行ECMAScript
- 要下载安装才能使用
不同点:
各有不同的API: nodejs运行js时,不能写DOM,BOM,也不能用window对象了
- Nodejs 环境可以去实现后端的功能
- 浏览器环境可以去实现前端的功能
四、nodejs中的模块分类
1.理解核心模块
核心模块就是 Node 内置的模块,需要通过唯一的标识名称来进行获取。
- 每一个核心模块基本上都是暴露了一个对象,里面包含一些方法供我们使用。
- 一般在加载核心模块的时候,变量(或常量)的起名最好就和核心模块的标识名同名。
- 例如:
const fs = require('fs')
,const path = require('path')
2.自定义模块
- 程序员自己写的模块
- 相当于我们在学习js时的自定义函数。
3.第三方模块
-
- 其他程序员写好的模块。nodejs生态提供了一个专门的工具npm来管理第三方模块,后面我们会专门讲到。
- 相当于别人写好的函数或者库。例如我们前面学习的axios, JQuery库,artTemplate等。
五、文件写入(fs-writeFileSync)再读取(writeFileSync)
1.fs-readFileSync-文件读取
注意:api的名字结尾有Sync(async是异步的,sync表示同步的)
2.fs-writeFileSync-文件写入
功能:向指定文件中写入字符串, 如果没有该文件则尝试创建该文件。
注意:它是覆盖写入,会把文件中的内容全部删除,再填入新的内容
六、路径问题-使用绝对路径
1.__dirname __filename 获取绝对路径
nodejs中提供了两个全局变量来获取获取绝对路径:
- __filename:获取当前被执行的文件的绝对路径
- __dirname:获取当前被执行的文件的文件夹所处的绝对路径
2.全局变量的含义是:
- 变量:它们的值是变化的。在不同的文件中值就不同,因为文件的路径也不同嘛。
- 全局:在任意地方都可以直接使用。
七、path模块
引入模块步骤:const path =require('path')
常用的api
- path.basename() :此方法返回
path
的最后一部分。一般可用来获取路径中的文件名。 - path.join() :路径拼接。
- path.parse(pathurl) :把一个路径转成一个对象
八、啥是模块化?
一个js文件可以引入其他的js文件,能使用引入的js文件的中的变量、数据,这种特性就称为模块化。使用模块化开发可以很好的解决变量、函数名冲突问题,也能灵活的解决文件依赖问题。
Node.js 中的 CommonJS 的模块化规范
CommonJS 规范CommonJS 规范中主要规定了以下 3 项内容:
- 导入其它模块时,统一使用 require() 函数。
- 每个 .js 文件,都是一个独立的模块,模块内的成员都是私有的。
- 在每个 JS 模块中,使用 module.exports 向外共享成员。
注意
- module.exports 是固定写法,一般放在文件的最末尾,也只用一次。
- module.exports表示当前模块要暴露给其它模块的功能。(可以导出对象,数组,函数等等类型)
两个对象的关系
初始exports和module.exports是指向同一块内存区域,其内容都是一个空对象。(exports是module.exports的别名)即:exports === module.exports // 输出是 true
- 在定义模块时:
如果直接给exports对象赋值(例如:exports={a:1,b:2}),此时,exports就不会再指向module.exports,而转而指向这个新对象,此时,exports与module.exports不是同一个对象。在引入某模块时:以该模块代码中module.exports
指向的内容为准。
八、了解npm和包
1.npm
npm
全称Node Package Manager
(node 包管理器),它的诞生是为了解决 Node 中第三方包共享的问题。npm
不需要单独安装。在安装Node的时候,会连带自动安装npm
。npm -v
检查安装的情况。- 官网
2.安装包分成三步:(注意不可起中文名字)
1)初始化项目。npm init 如果之前已经初始化,则可以省略。
2)安装包。 npm install 包名。[注意:保持联网的状态哈]
3)引入包,使用
1)下载包-修改镜像源
2)镜像源(下载包速度快)
检查当前的下包地址:
npm config get registry
把下包的地址切换为国内的淘宝服务器
npm config set registry=https://registry.npm.taobao.org/
3.全局安装包和本地安装包
一个经验法则:
- 要用到该包的命令执行任务的就需要全局安装
- 要通过require引入使用的就需要本地安装
4.全局安装nodemon包
作用:能帮我们自动检测到我们的代码的修改,并自动重新运行我们的代码
好处:它的好处在于会自动监听server.js这个文件的变化,如果变化了,就会重新自动再去运行。相当于是如下伪代码:
步骤:
1.在任意位置 打开一个小黑窗,输入如下命令:
2.npm install -g nodemon
回车