zoukankan      html  css  js  c++  java
  • node中的路径 path __dirname path.resolve path.join

    __dirname与./的区别

    Node.js中,__dirname总是指向被执行js文件的绝对路径,所以当你在/d1/d2/myScript.js文件中写了__dirname,它的值就是/d1/d2

    ./会返回你执行node命令的路径,

    比如你在目录D盘下执行d1/d2/myScript.js

    __dirname是d:/d1/d2

    ./指的是d:/

    有一个特殊情况在require()中使用./时,这时的路径就会是含有require()的脚本文件的相对路径

    例如:

    假如有如下目录结构:

    /dir1
    
      /dir2
    
       /pathtest.js

    pathtest.js

    const path=require('path');
    console.log('.= %s',path.resolve('__dirname'));
    console.log('__dirname= %s',path.resolve('.'));

    然后执行下面的代码:

    cd /dir1/dir2
    
    node pathtest.js

    结果:

    . = /dir1/dir2
    __dirname = /dir1/dir2

    如果我们的工作目录是dir1

    cd /dir1
    
    node dir2/pathtest.js

    结果:

    . = /dir1
    __dirname = /dir1/dir2

    此时,.指向我们的工作目录,即/dir1,__dirname还是指向/dir1/dir2

    在require中使用.

    如果在dir2/pathtest.js中调用了require方法,去引入位于dir1目录的js文件,你需要写成

    require('../pathtest.js')

    因为require中的路径总是相对于包含它的文件,跟你的工作目录没有关系。

    path.resolve([...paths])  根据参数解析出一个绝对路径

    传入参数:.../paths是传入的字符串参数,是路径序列或者路径片段

    返回值:字符串

     以应用程序为根目录

    普通字符串代表子目录

    /代表绝对路径根目录

    使用方法:

    1 path.resolve()方法可以将路径或者路径片段解析成绝对路径

    2 传入的路径从右至左被处理,后面每个path被依次解析,直到构造完成一个绝对路径。例如:path.resolve(‘/foo’,‘/bar’,‘baz’),将返回:/bar/baz

    3 如果处理完全部给定的path片段后还未生成一个绝对路径,则当前工作目录(绝对路径)会被用上。

    4 当传入的参数没有/时,将被传入解析到当前根目录

    5 零长度的路径将被忽略

    6 如果没有传入参数,将返回当前根目录

    事例代码:
    path.resolve('/foo/bar', './baz')
    // Returns: '/foo/bar/baz'
     
    
    path.resolve('/foo/bar', '/tmp/file/')
    // Returns: '/tmp/file'
    
    path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif')
    // if the current working directory is /home/myself/node,
    // this returns '/home/myself/node/wwwroot/static_files/gif/image.gif'

    1 传入的路径从右向左解析,遇到第一个绝对路径时完成解析

    2 ‘../’方法向前跳了一个目录

    path.resolve()是一个修改和整合文件路径的方法

    __dirname

    运行下面的代码:

    执行结果:

     

    结果分析:
    1.只传入__dirname也可以自动调用path.resolve方法
    2.可以拼接路径字符串,但是不调用path.resolve()方法拼接失败
    3.__dirname代表的是当前文件(a.js)的绝对路径
    4.从右至左解析,遇到了绝对路径/src,因此直接返回
     
    path.resolve()与__dirname最便捷的地方在于,与webpack结合更快捷的访问常用的文件。说白了就是解决了"由于访问文件所在的目录不同,访问固定目录下的某个文件,必须使用烦人的../../"这个痛点;
    比如当我们结合webpack为目录设置快捷的import方法的时候。
    修改之前 import foo from '../../../util/foo'
    修改之后import foo from 'util/foo'
    webpack配置 build/webpack.dev.conf.js
    resolve:{
      //解析扩展名
       extensions:[],
     alias:{
      // 快捷访问入口
      “util”:path.resolve(__dirname,'./src/util')
       }
    }

    path.join([...paths])

    path.join() 方法使用平台特定的分隔符把全部给定的 path 片段连接到一起,并规范化生成的路径。就是把多个参数字符串合并为一个路径字符串

    参考1:https://blog.csdn.net/zsensei/article/details/79094714

    参考2:https://www.jianshu.com/p/76966243f27f

  • 相关阅读:
    NLP概览(一)
    java正则表达式实例
    notepad++
    Mybatis点滴
    (转)GNU Make学习总结(二)
    (转)GNU Make学习总结(一)
    分页查询
    第三方插件
    单例模式读取数据库配置文件和JNDI连接数据源
    过滤器与监听器
  • 原文地址:https://www.cnblogs.com/xiaofenguo/p/12931942.html
Copyright © 2011-2022 走看看