node笔记02——Nodejs学习之path模块、最齐全的node.js学习,包含练习案例

Nodejs学习之path模块

什么是path模块?

path模块也是node.js官方提供的用于处理路径的模块,用于满足对路径处理的需求。

如果要在JavaScript中使用path模块同样也需要用如下方式进行导入

const path = require('path')

常用的方法有:

  • path.join() :将多个路径片段拼接成一个完整的路径字符串

  • path.basename() :从路径字符串中将文件名解析出来

    一、path.join( )

    const path = require('path')
    // 注意 ../ 会抵消前面的路径
    const pathStr = path.join('/a','/b/c','../', './d', 'e')
    // join方法会对路径进行一个拼接
    console.log(pathStr)
    // 输出了'/a/b/d/e' 其中的 /c 被 ../ 抵消掉了
    /*-------------------------------------------*/
    const pathStr2 = path.join(__dirname,'./files/成绩.txt')
    console.log(pathStr2)
    // 输出'/Users/trillion-star/Desktop/node学习/files/成绩.txt'
    

    以后在拼接路径的时候不要在使用“+”拼接路径,而使用join方法,如:

    const fs = require('fs')
    const path = require('path')
    
    fs.readFile(path.join(__dirname,'/files/成绩.txt'),'utf-8',function(err,dataStr){
      if(err){
        return console.log('读取文件失败:'+err.message)
      }
        console.log('读取文件成功:'+dataStr)
    })
    

    二、path.basename( )

    该方法可以获取路径中的最后一部分,路径终点的文件名,语法如下:

    path.basename(path[,ext])

    参数一、path,必选参数,路径的字符串

    参数二、[ ext ],可选参数,文件扩展名

    调用返回值、路径中的最后一部分

    代码示例:

    const path = require('path')
    
    // 定义一个文件的存放路径
    const fpath = 'a/b/c/index.html'
    // 从文件路径中获取到文件名
    const fullName = path.basename(fpath)
    //const fullName = path.basename(fpath,'html')// 剔除扩展名,只保留文件名
    console.log(fullName)
    // 打印得到结果"index.html"
    
    /*---------------------------*/
    
    console.log(path.extname(fullName))
    //获取路径中的文件扩展名 .html
    

    练习,

    目的: 将素材clock中index.html页面的html/css/javaScript代码进行拆分

    实现步骤:

    一、创建正则表达式来匹配style标签和html标签

    二、使用fs模块读取要被处理的HTML文档

    三、自定义resolveCSS/resolveHTML/resolveJS方法,写入index.CSS/index.HTML/index.JS文件

    1、读取到文档,定义正则,调用方法

    const fs = require('fs')
    const path = require('path')
    
    // 创建正则表达式来匹配style标签和script标签
    // \s表示空白字符,\S表示非空白字符 *表示任意字符
    const regStyle = /<style>[\s\S]*<\/style>/
    const regScript = /<script>[\s\S]*<\/script>/
    //读取需要被处理的HTML文档
    fs.readFile(path.join(__dirname,'./clock/index.html'),'utf-8',function(err,dataStr){
        if(err){
            return console.log('读取失败:'+err.message)
        }
        // console.log(dataStr) //读取成功
        // 调用方法,将dataStr传入,分别拆解css,js,html文件
        resolveCSS(dataStr)
        resolveScript(dataStr)
    })
    
    

    2、定义方法

    // 自定义处理css样式的方法
    // 用htmlStr来接收传入的dataStr
    function resolveCSS(htmlStr){
        //调用正则提取需要的内容
        const r1 = regStyle.exec(htmlStr)
        //将提取出来的样式字符串进行替换,将<style>标签替换成空字符串
        const newCSS = r1[0].replace('<style>','').replace('</style>','')
        // 将样式内容写如进新的文件中
        fs.writeFile(path.join(__dirname,'./clock/index.css'), newCSS,function(err){
            if(err) 
                return console.log('写入CSS失败:',err.message)
                console.log('写入CSS成功')
        })
    }
    
    // 自定义处理JavaScript样式的方法
    // 用htmlStr来接收传入的dataStr
    function resolveScript(htmlStr){
        const r2 =regScript.exec(htmlStr)
        const newScript = r2[0].replace('<script>','').replace('</script>','')
        //将获取到的样式写入新的文件中
        console.log(newScript)
        fs.writeFile(path.join(__dirname,'./clock/index.js'), newScript,function(err){
            if(err) 
                return console.log('写入JS失败:',err.message)
                console.log('写入JS成功')
        })
    }
    
    

    3、定义方法将提取出来的js和css用链入式写入HTML文档中

    // 自定义处理HTML结构的方法
    function resolveHTML(htmlStr){
        // 将字符串调用 replace 把内嵌的 style 和 script 标签替换为‘链入式’标签
        const newHTML = htmlStr.replace(regStyle,'<link rel="stylesheet" href="./index.css" />')
        .replace(regScript,'<script src="./index.js"></script>')
        // 写入金index.html文件中
        fs.writeFile(path.join(__dirname,'./clock/index.html'),newHTML,err=>{
            if(err) 
            return console.log('写入HTML失败:',err.message)
            console.log('写入HTML成功')
        })
    }
    

    4、成功运行

注意点

  • fs.writeFile方法可以用来创建文件并写入,但无法创建路径与文件夹
  • 重复调用fs.writeFile方法写入同一个文件的时候,新写入的内容会覆盖掉原先的旧内容,且不可逆。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值