1、基础认识

前端工程化:开发项目直到上线,过程中集成的所有工具和技术。



2、fs模块 - 读写文件
模块:类似插件,封装了方法/属性
fs模块:封装了与本机文件系统进行交互的方法/属性
语法:1. 加载fs模块对象 2. 写入文件内容 3. 读取文件内容

写入过程中有错误,err参数就有值,否则,err参数就为空

const fs = require('fs')
fs.writeFile('./text.txt', 'Hello,Node.js', (err) => {
if (err) console.log(err)
else console.log('写入成功')
})
fs.readFile('./text.txt', (err, data) => {
if (err) console.log(err)
// data 是 buffer 16进制数据流对象
// .toString() 转换为字符串
else console.log(data.toString())
})
3、path模块 - 路径处理
建议:在Node.js代码中,使用绝对路径
补充:__dirname(注意:前面是两个下划线)内置变量(获取当前模块目录 - 绝对路径)
注意:Windows:路径是\ Mac:路径是/
注意:path.join()会使用特定于平台的分隔符,作为界定符,将所有给定的路径片段连接在一起。

语法:加载path模块、使用path.joinn()方法,拼接路径

案例(体验) - 压缩前端 html
步骤:读取源html文件内容、正则替换字符串、写入到新的html文件中

// 1.1 读取源 html 文件内容
const fs = require('fs')
const path = require('path')
// __dirname 获取当前文件所在文件夹的绝对地址
fs.readFile(path.join(__dirname, 'public/index.html'), (err, data) => {
if (err) console.log(err)
else {
const htmlStr = data.toString()
// 1.2 正则替换字符串 g:全局替换
const resultStr = htmlStr.replace(/[\r\n]/g, '')
console.log(resultStr)
// 1.3 写入到新的 html 文件中
fs.writeFile(path.join(__dirname, 'dist/index.html'), resultStr, err => {
if (err) console.log(err)
else console.log('写入成功')
})
}
})
4、URL中的端口号
URL:统一资源定位符,简称网址,用于访问服务器里的资源。
端口号:标记服务器里不同功能的服务程序。
端口号范围:0-65535之间的任意整数。


http模块 - 创建Web服务
步骤:加载http模块,createServe 创建Web服务对象、监听request请求事件,设置响应头和响应体、配置端口号并启动Web服务、浏览器请求http://loaclhost:3000(loaclhost:固定代表本机的域名)

// 1.1 加载 http 模块,创建 Web 服务对象
const http = require('http')
// 1.2 创建Web服务对象
const server = http.createServer()
// 1.3 监听 request 请求事件,设置响应头和响应体
server.on('request', (req, res) => {
// 设置响应头-text/plain:内容类型-普通文本以及中文编码格式
res.setHeader('Content-Type', 'text/plain;charset=utf-8')
// 设置响应体内容,结束本次请求与响应
res.end('欢迎使用 Node.js 和 http 模块创建的 Web 服务')
})
// 1.4 配置端口号并启动 Web 服务 --- 区分访问哪个服务
server.listen(3000, () => {
console.log('Web 服务启动成功了')
})
案例:浏览时钟


const fs = require('fs')
const path = require('path')
// 1. 基于 http 模块,创建 Web 服务
const http = require('http')
const server = http.createServer()
server.on('request', (req, res) => {
// 2. 使用 req.url 获取请求资源路径,并读取 index.html 里字符串内容返回给请求方
if (req.url === '/index.html') {
fs.readFile(path.join(__dirname, 'dist/index.html'), (err, data) => {
// 设置响应内容类型-html超文本字符串,让浏览器解析成标签网页等
res.setHeader('Content-Type', 'text/html;charset=utf-8')
res.end(data.toString())
})
} else {
// 3. 其他路径,暂时返回不存在提示
res.setHeader('Content-Type', 'text/html;charset=utf-8')
res.end('你要访问的资源路径不存在')
}
})
server.listen(8080, () => {
console.log('Web 服务启动成功了')
})
5、Node.js 模块化
在 Node.js 中,每个文件都被视为一个单独的模块。项目是由多个模块文件组成的。
好处:提高代码复用性,按需加载,独立作用域。
使用:需要标准语法导出和导入进行使用

CommonJS标准

const baseURL = 'http://hmajax.itheima.net'
const getArraySum = arr => arr.reduce((sum, item) => sum += item, 0)
// 导出
module.exports = {
url: baseURL,
arraySum: getArraySum
}
const obj = require('./utils.js')
console.log(obj)
const result = obj.arraySum([5, 1, 2, 3])
console.log(result)
ECMAScript标准 - 默认导出和导入

utils.js:
const baseURL = 'http://hmajax.itheima.net'
const getArraySum = arr => arr.reduce((sum, item) => sum += item, 0)
// 默认导出
export default {
url: baseURL,
arraySum: getArraySum
}
index.js:
// 默认导入
import obj from './utils.js'
console.log(obj)
const result = obj.arraySum([10, 20, 30])
console.log(result)
package.json:
{
"type": "module"
}
ECMAScript标准 - 命名导出和导入
命名导出和导入与默认导出和导入可以一起使用

utils.js:
export const baseURL = 'http://hmajax.itheima.net'
export const getArraySum = arr => arr.reduce((sum, item) => sum += item, 0)
index.js:
// 命名导入
import {baseURL, getArraySum} from './utils.js'
console.log(obj)
console.log(baseURL)
console.log(getArraySum)
const result = getArraySum([10, 21, 33])
console.log(result)
6、包

案例:

arr.js
// 数组求和函数
const getArraySum = arr => arr.reduce((sum, item) => sum += item, 0)
module.exports = {
getArraySum
}
str.js
/**
* 目标:封装校验用户名和密码长度的函数
* 要求:用户名最少 8 位,密码最少为 6 位
*/
const checkUserName = username => {
return username.length >= 8
}
const checkPassWord = password => {
return password.length >= 6
}
module.exports = {
checkUser: checkUserName,
checkPwd: checkPassWord
}
index.js
// 本文件是,utils 工具包的唯一出口
// 作用:把所有工具模块方法集中起来,统一向外暴露
const { getArraySum } = require('./lib/arr.js')
const { checkUser, checkPwd } = require('./lib/str.js')
// 统一导出所有函数
module.exports = {
getArraySum,
checkUser,
checkPwd
}
server.js
// 导入 utils 软件包,使用里面封装的工具函数
const obj = require('./utils')
console.log(obj)
const result = obj.getArraySum([10, 20, 30])
console.log(result)
package.json
{
"name": "cz_utils",
"version": "1.0.0",
"description": "一个数组和字符串常用工具方法的包",
"main": "index.js",
"author": "itheima",
"license": "MIT"
}
npm - 软件包管理器

安装所有依赖


全局软件包 - nodemon


总结

常用命令

1181

被折叠的 条评论
为什么被折叠?



