path路径模块
1.path.join() 将多个路径片段拼接成一个完整的路径字符串
../可以抵消上一层路径
凡是遇到路径拼接都用path.join()方法,不再用+号拼接
2.path.basename() 从路径字符串中,将文件名解析出来
解析最后一部分的文件名 如果传一个参数 解析出最后一个的文件名
如果传两个参数 第二个参数则为最后一个片段的拓展名 得到最后一个除拓展名外的文件名
3.path.extname() 获取路径中的拓展名部分
4.关于正则补充
\s 表示空白字符 \S表示非空白字符 *表示可以匹配任意次
匹配<style></style>标签的正则
/<style>[\s\S]*<\/style>/匹配所有字符任意次
.exec() 该方法用于检索字符串 (test也用于检索 但返回值是true/false) 如果找到 返回值是一个数组,其中存放匹配的结果,此数组的第 0 个元素是与正则表达式相匹配的文本 如果未找到 返回值null
例题 简化HTML 将css/js 抽取再进行标签嵌入
//把一份HTMl文件中的css js 做抽取存放
//先引入 path fs
//定义标签正则 方便检索
const regCss = /<style>[\s\S]*<\/style>/
const regJs = /<script>[\s\S]*<\/script>/
//读取HTML文件
fs.readFile(path.join(__dirname, './add.html'), 'utf8', function (err, dataStr) {
if (err) {
return console.log('读取文件失败' + err.message);
}
//调用方法
getCss(dataStr);
getJs(dataStr);
getHtml(dataStr);
})
function getCss(htmlStr) {
//如果检索到 返回一个数组
const r1 = regCss.exec(htmlStr)
//索引为0的是提取的需要的内容
const newR1 = r1[0].replace("<style>", " ").replace("</style>", " ")
fs.writeFile(path.join(__dirname, './clock/index.css'), newR1, function (err) {
if (err) {
return console.log('写入失败' + err.message);
}
console.log('写入CSS成功');
})
}
//将提取出来的数据 写入到相应的文件中
function getJs(htmlStr) {
//如果检索到 返回一个数组
const r1 = regJs.exec(htmlStr)
//索引为0的是提取的需要的内容 将不需要的标签替换成" "空字符串
const newR1 = r1[0].replace("<script>", " ").replace("</script>", " ")
//将提取到的数据 写入一个文件中
fs.writeFile(path.join(__dirname, './clock/index.js'), newR1, function (err) {
if (err) {
return console.log('写入失败' + err.message);
}
console.log('写入JS成功');
})
}
//不需要多余的css样式以及js的简化版HTML文件
function getHtml(htmlStr) {
let newR1 = htmlStr.replace(regCss, '<link rel="stylesheet" href="./clock/index.css">').replace(regJs, '<script src="./clock/index.js"></script>')
fs.writeFile(path.join(__dirname, './clock/index.html'), newR1, function (err) {
if (err) {
return console.log('写入失败' + err.message);
}
console.log('写入html成功');
})
}