什么是 path 模块
Node.js path 模块是一个内置模块,可帮助您以独立于操作系统的方式使用文件系统路径。如果要构建支持 OSX、Linux 和 Windows 的 CLI 工具,则 Path 模块是必不可少的。
path.join 方法的使用
用于连接路径。该方法的主要用途在于,会正确使用当前系统的路径分隔符,Unix系统是"/“,Windows系统是”\"。
const path = require('path') const fs = require('fs') // 注意:../ 会抵消前面的一层路径 // console.log(path.join('/a', '/b/c', '../', './d', '/e')) // \a\b\d\e // fs.readFile(__dirname + './files/1.txt', function (err, data) { // if (err) { // return console.log("读取文件失败") // } // console.log("读取文件成功") // }) // 今后凡是涉及到路径拼接的操作,都需要使用 path.join() 方法进行处理。不要直接使用 + 进行字符串的拼接 // 使用 path.join() 方法可以直接把 . 屏蔽掉,用 + 号拼接不行会直接请求失败 fs.readFile(path.join(__dirname , './files/1.txt'), function (err, data) { if (err) { return console.log("读取文件失败") } console.log("读取文件成功") })
path.basename 方法的使用
返回路径中的最后一部分。同 Unix 命令 bashname 类似。
const path = require('path') // 定义文件的存放路径 const fpath = '/a/b/c/index.html' // 获取路径的文件名 // console.log(path.basename(fpath)) // 获取路径的文件名,并去除扩展名 console.log(path.basename(fpath,'.html'))
path.extname 方法的使用
返回路径中文件的后缀名,即路径中最后一个 . 之后的部分。如果一个路径中并不包含 . 或该路径只包含一个 . 且这个 . 为路径的第一个字符,则此命令返回空字符串。
const path = require('path') // 这是文件的存放路径 const fpath = 'a/b/c/index.html' // 获取路径中的文件扩展名 console.log(path.extname(fpath))
path 基本案例
把一个 html 文件,更改为 html、css、js 三份文件
自己找一个 html 文件放在 clock 文件夹下,在 2.1 步骤处引入
// 1.1 导入 fs 模块 const fs = require('fs') // 1.2 导入 path 模块 const path = require('path') // 1.3 定义正则表达式,分别匹配 <style></style> 和 <script></script> 标签 // 小写 s 代表空白字符,大写 S 代表非空白字符,* 代表任意多次 const refStyle = /<style>[\s\S]*<\/style>/ const refScript = /<script>[\s\S]*<\/script>/ // 2.1 调用 fs.readFile() 方法读取文件 fs.readFile(path.join(__dirname, './files/index.html'), function (err, data) { // 2.2 读取 HTML 文件失败 if (err) { return console.log("读取HTML文件失败!" + err.message) } // 2.3 读取文件成功后,调用对应的三个方法,分别拆解出 css,js,html 文件 resolveCSS(data) resolveJS(data) resolveHTML(data) }) // 3.1 定义处理 css 样式的方法 function resolveCSS(val) { // 3.2 使用正则提取需要的内容 const r1 = refStyle.exec(val) // 3.3 将提取出来的样式字符串,进行字符串的 replace 替换操作 const newCSS = r1[0].replace('<style>', '').replace('</style>', '') // 3.4 调用 fs.writeFile() 方法,将提取的样式,写入到 clock 目录中 index.css的文件里面 fs.writeFile(path.join(__dirname, './clock/index.css'), newCSS, function (err) { if (err) return console.log("写入 CSS 样式失败!") console.log("写入样式文件成功") }) } // 4.1 定义处理 js 样式的方法 function resolveJS(val) { // 4.2 通过正则,提取对应的 <script></script> 标签内容 const r2 = refScript.exec(val) // 4.3 将提取出来的内容,做进一步处理 const newJS = r2[0].replace('<script>', '').replace('</script>', '') // 4.4 调用 fs.writeFile() 方法,将提取的结果,写入到 clock 目录中 index.js的文件里面 fs.writeFile(path.join(__dirname, './clock/index.js'), newJS, function (err) { if (err) return console.log("写入 CSS 样式失败!") console.log("写入样式文件成功") }) } // 5.1 定义处理 HTML 样式的方法 function resolveHTML(val) { // 5.2 将字符串调用 replace 方法,把内嵌的 style 和 script 标签,替换为外联的 link 和 script 标签 const newHTML = val.toString().replace(refStyle,'<link rel="stylesheet" href="./index.css">').replace(refScript,'<script src="./index.js"></script>') // 5.3 调用 fs.writeFile() 方法,将得出的结果,写入到 clock 目录中 index.html的文件里面 fs.writeFile(path.join(__dirname, './clock/index.html'), newHTML, function (err) { if (err) return console.log("写入 HTML 样式失败!") console.log("写入样式文件成功") }) }
以上就是 node.js 中 path 的路径处理问题,不懂得也可以在评论区里问我,以后会持续发布一些新的功能,敬请关注。