Node.js

基于Chrome V8引擎的JavaScript运行环境

node 文件名.js

运行一个js文件

FS 模块

文件系统模块

导入模块

const fs = require('fs');
// 或者是针对默认暴露的方式引入
import fs from "fs";

读取文件

fs.readFile(path[, options], callback)

  • 参数1为路径字符串(必选)

  • 参数2使用[]包括起来的,表示这个参数可选,为字符串,将以这个参数作为编码格式读取文件

  • 参数3为必选参数,表示文件读取完成后通过处理的回调函数

参数3为回调函数,需要两个参数

  • 当文件存在时,参数1的值为null,参数2的值为文件内容
  • 当文件不存在时,参数1为错误对象,参数2为undefined
const fs = require("fs");
fs.readFile("../file/11.txt", "utf-8", (a, b) =>{
    console.log(a);
    console.log("---");
    console.log(b);
});

无论读取成功或者失败,都会调用回调函数

所以说判断文件是否读取成功只需要判断回调函数的第一个参数是否为null

const fs = require("fs");
fs.readFile("../file/1.txt", "utf-8", (a, b) =>{
    if (a != null){
        return console.log("文件读取失败")
    }
    console.log("文件读取成功,文件内容为:", b);
});

写入文件

fs.writeFile("文件路径字符串", "文件内容", "字符集编码字符串", 回调函数)

  • 参数1必须标明
  • 参数2必须标明
  • 参数3可不写,默认为utf-8
  • 回调函数表示文件写入完成后调用的函数

回调函数需要1个参数,如果写入成功,这个参数的值为null,如果写入失败,这个参数将会是一个对象

const fs = require("fs");
fs.writeFile("../file/2.txt", "你好,nodejs!", (e) => {
    if (e === null){
        return console.log("写入成功");
    }
    console.log("写入失败,详情信息为:", e);
})

path路径模块

const path = require("path");

path.basename("路径")在路径中获取文件名

path.join("参数1", ..., "参数n")返回string,会将多个参数合并为一个路径

  • ../会抵消掉一级路径
image-20220205175205172

http模块

const http = require("http");

大体的步骤:

  • 引入http模块
  • 创建server实例
  • 使用server.on()绑定request事件
  • 启动服务器并指定端口
// 导入http模块
const http = require("http");
// 创建http实例
const server = http.createServer();
// 绑定request事件
server.on("request", (request, response) => {
    console.log("访问服务器了");
})
//启动服务器
server.listen(3143, () => {
    console.log("启动服务器后的回调函数")
})
// 导入http模块
const http = require("http");
// 创建http实例
const server = http.createServer();
// 绑定request事件
server.on("request", (request, response) => {
    console.log("访问服务器了");
    console.log("请求地址:",request.url);
    console.log("请求方式:",request.method);
    // 设置响应头,解决中文乱码
    response.setHeader("Content-Type", "text/html; charset=utf-8");
    // 向服务器返回内容
    response.end("<h1>响应</h1>");
})
//启动服务器
server.listen(3143, () => {
    console.log("启动服务器后的回调函数")
})

模块化

模块分类:

  • 内置模块,例如之前所用到的都是内置模块
  • 自定义模块,用户创建的每个js文件都是一个自定义模块
  • 第三方模块

模块的加载

内置模块、第三方模块:

  • 直接使用require("模块名")

自定义模块:

  • 需要require("路径/模块名"),需要写入路径

module对象

使用这个对象可以查看一些信息

console.log(module);
Module {
  id: '.',
  path: 'C:\\Users\\singx\\OneDrive\\前端\\Node\\hello1\\js',
  exports: {},
  filename: 'C:\\Users\\singx\\OneDrive\\前端\\Node\\hello1\\js\\1.js',
  loaded: false,
  children: [],
  paths: [
    'C:\\Users\\singx\\OneDrive\\前端\\Node\\hello1\\js\\node_modules',
    'C:\\Users\\singx\\OneDrive\\前端\\Node\\hello1\\node_modules',
    'C:\\Users\\singx\\OneDrive\\前端\\Node\\node_modules',
    'C:\\Users\\singx\\OneDrive\\前端\\node_modules',
    'C:\\Users\\singx\\OneDrive\\node_modules',
    'C:\\Users\\singx\\node_modules',
    'C:\\Users\\node_modules',
    'C:\\node_modules'
  ]
}

其中exports属性中的内容为暴露出的对象

如果想要对外共享对象,那么定义变量/函数/对象时,需要module.exports.变量名 = xxx;

由于module.exports写起来比较复杂,因此nodejs提供了exports对象,module.exportsexports指向的是同一个对象,两者都可以随便改变指向,最终暴露出来的变量还是以module.exports为准

require一个模块时,得到的永远都是module.exports中的对象

common读音为ˈkɑːmən,中文为常见

Nodejs遵循CommonJS模块化规范

包和NPM

Nodejs中的第三方模块称为包

NPM全称为Node Package Manager

安装包

npm install 包名
npm i 包名

在当前项目下安装包后,会自动生成文件夹node_modules、文件package-lock.json

这些文件中保存着依赖以及包的引入信息,npm会自动维护,一般不需要修改

安装指定版本的包

npm i 包名@版本号

package.json

npm规定在项目的根目录下必须要有这个文件,这个文件中保存着项目的相关信息

  • 版本号
  • 描述
  • 那些包在开发时用得到
  • 那些包在部署时用得到

快速创建package.json命令,一般在没有写任何内容时创建此文件,只需要写一次

npm init -y
  • 此命令只能在英文目录下执行,并且不能包含空格

  • 当使用npm安装包的时候,将会自动的在这个文件中放入包的名称、版本

  • 在创建新的这个文件时,不会有dependencies属性,当执行过npm i 包名后会自动的创建

  • 当误删node_modules文件夹或者打开了一个剔除所有的依赖的项目时需要再次引入依赖包(前提时存在package.json),此时只需要运行:

    • npm install
      
    • npm i
      
    • 以上命令中的任何一个就可以安装所有的依赖

  • 一个标准的npm包中的package.json文件中必须包含nameversionmain属性,这三个属性代表着包的名字、版本号、包的入口

卸载包

卸载包没有任何简写形式,有一种方式:

npm uninstall 包名

卸载后会自动的在package.jsondependencies属性中移除这个包,并在node_modules文件夹中删除这个依赖

仅在开发期间使用的依赖

如果一些包仅在开发期间使用,可以将这些包移至devDependencies属性中,如果开发期间和上线期间都能用得到,则需要放到dependencies属性中

写法:

npm i 包名 -D

包名和最后的参数的顺序位置没有特别的要求,例如以下的写法也是允许的

npm i -D 包名

以上写法是简写形式,完整写法为

npm install 包名 --save-dev

包的分类

npm所下载的包的种类有两种,分别是项目包全局包

项目包

  • 被安装到node_modules文件夹中的包
  • 又分为两类:
    • 开发依赖包(devDependencies属性中包)
    • 核心依赖包(dependencies属性中包)

全局包

在执行npm i 包名时添加了-g参数所安装的包为全局包,例如

npm i 包名 -g

在Windows系统中,全局包会被安装到C:\Users\user\AppData\Roaming\npm\node_modules

卸载全局包

npm uninstall 包名 -g
  • 只有工具包才有必要全局安装
  • 工具包提供了一些终端命令

一些全局包举例:

  • i5ting_tocmarkdown文件转换为html文件

Q.E.D.


念念不忘,必有回响。