简单了解Node.js

125 阅读5分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

node.js简介

浏览器中的JavaScript组成

浏览器中的JavaScript组成

浏览器中的JavaScript由两部分组成

  1. lECMAScript (JS的语法)
  2. WebAPI (浏览器内置的API)

JavaScript代码是如何被转换成最终效果的?

  1. 首先,有ECMAScript 和 浏览器自带的 WebAPI,让我们写代码有了依据
  1. 编写代码
  1. 代码通过 JS解析引擎 处理
  1. 得到最终结果

其中不同的浏览器使用不同的 JavaScript 解析引擎:

Chrome 浏览器 => V8

Firefox 浏览器=> OdinMonkey(奥丁猴)

Safri 浏览器=> JSCore

IE 浏览器=> Chakra(查克拉) ...

其中,Chrome 浏览器的 V8 解析引擎性能最好!

运行环境

运行环境是一个概念,指的是代码正常运行所需要的必要条件

必须有内置API (才能写代码)

必须有解析引擎(才能运行代码)

就像人的生活环境必须要水,食物,氧气...

浏览器,就是JavaScript的运行环境,因为它具备代码正常运行的必要条件

node.js

前面提到了运行环境,而node也是一个javascript代码的运行环境

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境

浏览器 和 Node,都是 JavaScript 的运行环境

具体来说,浏览器是客户端的JS环境;Node是服务端的JS运行环境

不同环境中,都可以运行 ECMAScript 核心代码

WebAPI是浏览器特有的,只能在浏览器环境下使用;

Node内置API(内置模块)是Node环境特有的,只能在Node环境中使用

1661169892705.png 在node.js官网下载安装包进行安装node.js

安装后,打开终端窗口,执行 node -v 命令,如果看到版本号,说明安装成功。

1661169989941.png

node终端

无论执行 git 命令,还是 node 命令,都需要使用终端工具

vscode内置了终端工具,我们可以使用它来执行 git 或 node 命令

最佳打开vscode终端的方式

在文件或文件夹上,鼠标右键,在集成终端中打开

这样打开的好处是,终端路径刚好是 当前文件或文件夹的路径

1661170058968.png

node命令

Node中的模块化

在node.js中我们想要访问另一个js文件的变量必须要导出和导入才能够使用

导出

可以通过 module.exports 语法共享当前作用域的变量

1661170375807.png 接收

要通过 require() 方法记载js文件共享的对象

1661170503090.png

node模块分类

  1. 自定义模块:用户自己创建的每个JS文件,都是自定义模块
  1. 内置模块(核心模块):Node安装后,即可使用的模块,Node环境自带。
  1. 第三方模块:其他人或公司、组织开发的模块,发布到 npm 网站,我们需要下载使用的模块

使用

  1. 加载自定义模块

    1. a 文件,必须通过 module.exports 共享(导出、暴露)当前模块中的变量
    2. b 文件,需要通过 require() 加载(导入)。(a 文件导出什么,b 文件就得到什么)
    3. 加载自定义模块时,必须要带路径 (相对路径、绝对路径都可以;但必须带路径,哪怕是 ./ 也不能省略)
    4. 加载自定义模块时,可以省略后缀
  1. 加载内置模块

    1. 直接使用 require() 加载即可。
    2. 加载模块时,无需带路径,比如 require('fs')
    3. 加载内置模块,得到对象类型,对象中内置了很多API方法
  1. 加载第三方模块

    必须先下载,使用nmp -i 进行下载,然后使用

node内置模块

Node内置模块有很多,具体参见 www.apiref.com/nodejs-zh/f…

内置模块 - fs 模块

fs 模块,f(file)s(system),文件系统;所有关于文件的操作,都可以通过这个模块完成,

比如创建文件

获取文件里面的内容

向文件中添加内容

创建文件夹

遍历文件夹里面的文件

监视文件的变化

判断文件是否存在

…….

fs模块 - fs.readFile()

fs.readFile() 方法的作用是:读取文件

读取:获取

读取文件:获取文件里面的内容

注意,这是一个异步方法 (同步方法是 fs.readFileSync())

fs.readFile('文件路径', [utf-8], (err, data) => {
  // 读取无错误,err=null; 读取有错误,err=错误对象
  // data 表示读取的结果
})

1661170894717.png

fs模块 - fs.writeFile()

fs.writeFile() 方法的作用是:写入文件

写入:向文件中添加内容

特点:

如果文件不存在,则会创建文件(但不能递归创建)

如果文件中有内容,将会被覆盖

如果文件夹不存在,报错

注意,这是一个异步方法

fs.writeFile('文件路径', '写入的内容', err => {
  // 写入无错误,err=null; 写入有错误,err=错误对象
})
​

1661171119466.png

内置模块 - path 模块

path 模块,path 是路径的意思;所有和路径相关的操作,都可以通过这个模块完成

拼接一个路径

获取当前文件所在的路径

获取路径中的文件名

获取路径中的后缀

...

path.extname()

path.extname()方法的作用是:获取路径中的后缀

参数:路径

path.extname('文件路径');
​
path.extname('css/index.css'); // .css
​
path.extname('E:/a/b/index.html'); // .html
​
path.extname('assets/js/login.xyz'); // xyz
​
path.extname('abc/bcd/index'); // null

path.join()

path.join() 方法的作用是:拼接给出的路径

参数:两个或更多个路径

额外补充:Node中,有一个全局变量 __dirname ,它表示当前 JS 文件所在的绝对路径

console.log(__dirname); // D:/study/100/Node01/code
​
path.join('路径', '路径', ……);
​
path.join('css', 'index.css'); // css/index.css
​
path.join('a', 'b', 'c', 'd.js'); // a/b/c/d.js
​
path.extname(__dirname, 'js', 'a.js');  
// D:/study/100/Node01/code/js/a.js