Node.js 学习 path模块、fs模块、npm软件包管理器、导出、导入

105,097次阅读
没有评论

共计 5364 个字符,预计需要花费 14 分钟才能阅读完成。

目录

1.Node.js 入门

1.1 什么是 Node.js

1.2 fs 模块 - 读写文件

1.3 path 模块 - 路径处理

1.4 案例 - 压缩前端 html

1.5 认识 URL 中的端口号

1.6 http 模块 - 创建 Web 服务

1.7 案例 - 浏览时钟

2.Node.js 模块化

2.1 模块化简介

2.1.1 什么是模块化?

2.1.2 CommonJS 标准导出和导入(默认)

2.2 ECMAScript 标准 - 默认导出和导入

2.3 ECMAScript 标准 - 命名导出和导入

2.4 包的概念

2.5 npm 软件包管理器

2.6 npm 安装所有依赖

2.7 npm 全局软件包 -nodemon

2.8 Node.js 总结


1.Node.js 入门

1.1 什么是 Node.js

定义:Node.js 是一个开放源代码的服务器平台,用于在服务器中执行 JavaScript 代码。它通常运行在服务器上而不是浏览器中。

作用:使用 Node.js 编写服务器端程序

  • ✓ 编写数据接口,提供网页资源浏览功能等等
  • 前端工程化:为后续学习 Vue 和 React 等框架做铺垫

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

Node.js 为何能执行 JS?

原理:Node.js 是建立在 Google 的 V8 JavaScript 引擎之上,这意味着它可以运行 JavaScript 代码而无需在浏览器中。这意味着开发者可以使用 Javascript 来编写服务器端代码,从而在客户端和服务器端都使用同一种语言和同一种编程范式,简化了开发和测试工作。

浏览器和 Node.js 的区别:都支持 ECMAScript 标准语法,Node.js 有独立的 API

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

 

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

可以看到 Node.js,没有浏览器的 BOM 和 DOM

如何使用 Node.js?

需求:新建 JS 文件,并编写代码后,在 node 环境下执行

命令:在 VSCode 集成终端中,输入 node xxx.js,回车即可执行

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

1.2 fs 模块 - 读写文件

模块:类似插件,封装了
方法 / 属性

fs 模块:封装了与本机文件系统进行交互的,方法 / 属性

语法:

  • 1. 加载 fs 模块对象
  • 2. 写入 文件内容
  • 3. 读取 文件内容

实现:

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

注意事项:在读取文件时,成功返回的 data,这里的 data 是 buffer 16 进制数据流对象,

但是可以通过 toString()方法变成字符串。

1.3 path 模块 - 路径处理

问题:Node.js 代码中,相对路径是根据
终端所在路径
来查找的,可能无法找到你想要的文件。

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

解决方案:

建议:在 Node.js 代码中,使用
绝对路径。

补充:__dirname 内置变量(获取当前模块目录 - 绝对路径)


windows:D: 备课代码 3 - B 站课程3_Node.js 与 Webpack3-code3


mac:/Users/xxx/Desktop/ 备课代码 /3- B 站课程 /03_Node.js 与 Webpack/03-code/03

注意:
path.join()
会使用特定于平台的分隔符,作为定界符,将所有给定的路径片段连接在一起

语法:

  • 1. 加载 path 模块
  • 2. 使用 path.join 方法,拼接路径

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

代码:

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

1.4 案例 - 压缩前端 html

原始:

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

需求:把 回车符(r)和换行符(n)去掉后,写入到新 html 文件中

步骤:

  • 1. 读取 源 html 文件内容
  • 2. 正则 替换 字符串
  • 3. 写入 到新的 html 文件中

代码:

// 案例 - 压缩前端 html
// 需求:把 回车符(r)和换行符(n)去掉后,写入到新 html 文件中
// 步骤:// 1. 读取源 html 文件内容  public/index.html
// 2. 正则替换字符串   String.replace(pattern, replacement)  pattern 可以是正则
// 3. 写入到新的 html 文件中   dist/index.html

const fs = require('fs')
const path = require('path')

fs.readFile(path.join(__dirname, 'public/index.html'), (err, data) => {if (err) console.log(err)
    else {
        // 使用正则表达式替换
        const disString = data.toString().replace(/[rn]/g, '')
        console.log(disString)
        // 将处理过的文件写到其他位置
        fs.writeFile(path.join(__dirname, 'dist/index.html'), disString, err => {if (err) console.log(err)
            else console.log('写入成功')
        })
    }
})

实现后效果:

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

1.5 认识 URL 中的端口号

URL:
统一资源定位符,简称网址 用于访问服务器里的资源

端口号:标记服务器里不同功能的
服务程序

端口号范围:0-65535 之间的任意整数

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

平常我们没加端口号也能访问到数据,是因为 http 协议,默认 访问 80 端口。

Web 服务程序
:用于提供网上信息浏览功能

注意:0-1023 和一些特定端口号被占用,我们自己编写服务程序请避开使用

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

1.6 http 模块 - 创建 Web 服务

需求:创建 Web 服务并响应内容给浏览器

步骤:

  • 1. 加载 http 模块,创建 Web 服务对象
  • 2. 监听 request 请求事件,设置响应头和响应体
  • 3. 配置 端口号 启动 Web 服务
  • 4. 浏览器请求 http://localhost:3000 测试
  • (localhost:固定代表本机的域名)

代码:

// 需求:创建 Web 服务并响应内容给浏览器
// 步骤:// 1. 加载 http 模块,创建 Web 服务对象
// 2. 监听 request 请求事件,设置响应头和响应体
// 3. 配置端口号并启动 Web 服务
// 4. 浏览器请求 http://localhost:3000 测试
//(localhost:固定代表本机的域名)// 加载 http 模块,创建 Web 服务对象
const http = require('http')
const server = http.createServer()
// 监听 request 请求事件,设置响应头和响应体
server.on('request', (req, res) => {
    // 设置 text/plain;charset=utf-8 , 请求体才可以显示中文
    res.setHeader('Content-Type', 'text/plain;charset=utf-8')
    // 请求体
    res.end('欢迎使用 node.js 和 http 模块创建的 Web 服务')
})

// 配置端口号并启动 Web 服务
server.listen(3000, () => {console.log('Web 启动成功')
    
})

1.7 案例 - 浏览时钟

需求:基于 Web 服务,开发提供
网页资源
的功能。

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

浏览时钟

步骤:

  • 1. 基于 http 模块,创建 Web 服务
  • 2. 使用 req.url 获取请求 资源路径 ,判断并 读取 index.html 里字符串内容返回给请求方
  • 3. 其他路径,暂时返回不存在的提示
  • 4. 运行 Web 服务,用浏览器发起请求测试 http://localhost:8080/index.html

代码:

/**
 * 目标:基于 Web 服务,开发提供网页资源的功能
 * 步骤:*  1. 基于 http 模块,创建 Web 服务
 *  2. 使用 req.url 获取请求资源路径,并读取 index.html 里字符串内容返回给请求方
 *  3. 其他路径,暂时返回不存在提示
 *  4. 运行 Web 服务,用浏览器发起请求
 */

// 1. 基于 http 模块,创建 Web 服务
const http = require('http')
const server = http.createServer()
const fs = require('fs')
const path = require('path')
const {error, log} = require('console')

// 2. 使用 req.url 获取请求资源路径,并读取 index.html 里字符串内容返回给请求方
server.on('request', (req, res) => {
  // req.url 得到的是资源路径
  if (req.url === '/index.html') {fs.readFile(path.join(__dirname, 'dist/index.html'), (error, data) => {if (error) console.log(error)
      else {const resource = data.toString()
        res.setHeader('Content-Type', 'text/html;charset=utf-8')
        res.end(resource)
      }
    })
  } else {
    // 3. 其他路径,暂时返回不存在提示
    res.setHeader('Content-Type', 'text/html;charset=utf-8')
    res.end('不存在提示')
  }
})

// 4. 运行 Web 服务,用浏览器发起请求
server.listen(8080, () => {console.log('Web 服务启动成功')

})

2.Node.js 模块化

2.1 模块化简介

2.1.1 什么是模块化?

定义:在 Node.js 中,每个文件都被视为一个单独的模块。

概念:项目是由很多个模块文件组成的

好处:提高代码复用性,按需加载,
独立作用域

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

使用:需要标准语法 导出 导入 进行使用。

2.1.2 CommonJS 标准导出和导入(默认)

使用:

  • 1. 导出:module.exports = {}
  • 2. 导入:require(‘ 模块名或路径 ’)

模块名或路径:

  • 内置模块:直接写名字(例如:fs,path,http)
  • 自定义模块:写模块文件路径(例如:./utils.js)

演示:

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

2.2 ECMAScript 标准 - 默认导出和导入

默认标准使用:

  • 1. 导出:export default {},也可以是一个函数
  • 2. 导入:import 变量名 from ‘ 模块名或路径 ’
     

这里的变量名就是 export default 里面的对象。

注意事项:
Node.js 默认支持 CommonJS 标准语法

如需使用 ECMAScript 标准语法,在运行模块所在文件夹新建 package.json 文件,

并设置 {“type” : “module”}

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

2.3 ECMAScript 标准 - 命名导出和导入

命名标准使用:

  • 1. 导出:export 修饰定义语句
  • 2. 导入:import {同名变量} from ‘ 模块名或路径‘

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

如何选择:

  • 按需 加载,使用 命名 导出和导入
  • 全部 加载,使用 默认 导出和导入

2.4 包的概念

包:将
模块,代码,其他资料
聚合成一个文件夹。

包分类:

  • 项目包:主要用于编写项目和业务逻辑
  • 软件包:封装工具和方法 进行使用

要求:根目录中,必须有 package.json 文件(记录包的清单信息)

package.json 文件的作用?

        ➢ 记录
软件包的名字
,作者,
入口
文件等信息

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

注意:导入软件包时,引入的默认是 index.js 模块文件 / main 属性指定的模块文件

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

需求:封装数组求和函数的模块,判断用户名和密码长度函数的模块,形成成一个
软件包。

分析执行过程:

lib 文件夹下的 js 都是封装了属性和方法,方便开发者调用,但是该软件包引入时只会去访问该包的(
默认是 index.js 模块文件 / main 属性指定的模块文件
),该文件为唯一入口,因此需要把所有封装的再封装一遍,提供调用者使用。

演示:

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

2.5 npm 软件包管理器

定义
npm(“Node Package Manager”的缩写)是 Node.js 标准的软件包管理器,用来下载和管

理 Node.js 包依赖。

使用:

  • 1. 初始化清单文件:npm init -y(得到 package.json 文件,有则略过此命令)
    • package.json 是 Node.js 项目的核心文件,它包含了项目的元数据、依赖项、脚本等重要信息。
  • 2. 下载软件包:npm i 软件包名称
  • 3. 使用软件包

npm – 安装所有依赖

原理:

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

引入软件包:const dayjs = require(“dayjs”);

 

2.6 npm 安装所有依赖

问题:项目中不包含 node_modules,能否正常运行?

答案:不能,缺少依赖的本地软件包(里面包含引入软件包的源码)

问题:为什么一般拷贝别人的项目是很多都没有 
node_modules 文件?

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

原因:因为,自己用 npm 下载依赖比磁盘传递拷贝要快得多

解决:项目终端输入命令:
npm i,因为  
package.json 存在软件包以及版本,因此可以恢复

node_modules 文件。

2.7 npm 全局软件包 -nodemon

软件包区别:

  • 本地软件包:当前项目 内使用,封装 属性和方法,存在于 node_modules
  • 全局软件包:本机 所有项目 使用,封装 命令和工具,存在于系统设置的位置

nodemon 作用:替代 node 命令,检测代码更改,自动重启程序

使用:

  • 1. 安装:npm i nodemon -g(-g 代表安装到全局环境中)
  • 2. 运行:nodemon 待执行的目标 js 文件

2.8 Node.js 总结

Node.js 包:

概念:把模块文件,代码文件,其他资料聚合成一个文件夹

项目包:编写项目需求和
业务逻辑
的文件夹

软件包:
封装工具和方法
进行使用的文件夹(一般使用 npm 管理)

  • 本地软件包:作用在 当前 项目,一般封装的 属性 / 方法,供项目调用编写业务需求
  • 全局软件包:作用在 所有 项目,一般封装的 命令 / 工具,支撑项目运行

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

常用命令:

Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

原文地址: Node.js 学习 path 模块、fs 模块、npm 软件包管理器、导出、导入

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-10-14发表,共计5364字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)