node.js路径处理方法以及绝对路径详解


Posted in Javascript onMarch 04, 2021

1. 路径处理方法

__dirname

表示当前文件所在的目录的绝对路径

__filename

表示当前文件的绝对路径

module.filename ==== __filename 等价

process.cwd()

返回运行当前脚本的工作目录的路径,一般情况下不变,在process.chdir()后,或者shelljs.cd切换目录后会发生变化

process.chdir()

改变工作目录

2. 绝对路径

2.1  要获取node项目的根路径,可以使用 node-app-root-path 这个包

2.2  更好的写绝对路径的方式是使用best-require这个包

根目录使用~

require('~/application/apis/controllers/posts');
require('~/application/apis/services/rest');
require('~/application/apis/config');

别名目录使用:

//长目录设置别名
const ROOT_PATH = process.cwd();
require('best-require')(ROOT_PATH, {
 apis: ROOT_PATH + '/application/apis',
 controllers: ROOT_PATH + '/application/apis/controllers'
});
//使用别名更简洁
require(':controllers/posts');
require(':apis/services/rest');
require(':apis/config');

2.3 在全局变量上挂载路径

//声明
var path = require('path')
global.appRequire = function(path) {
 return require(path.resolve(__dirname, path))
}
//使用
var User = appRequire('app/model/User')

3. path.join和path.resolve的区别

3.1 path.join 是连接路径,仅仅做路径的连接

console.log(path.join(__dirname,'a','b')); // 假如当前文件的路径是E:/node/1,那么拼接出来就是E:/node/1/a/b。
console.log(path.join(__dirname,'/a','/b','..')); // 路径开头的/不会影响拼接,..代表上一级文件,拼接出来的结果是:E:/node/1/a
console.log(path.join(__dirname,'a',{},'b')); // 而且path.join()还会帮我们做路径字符串的校验,当字符串不合法时,会抛出错误:Path must be a string.

3.2 path.resolve 是解析绝对路径,将一个或多个连接后的路径解析为绝对路径,以应用程序为根目录,普通字符串代表子目录,/代表绝对路径根目录

3.2.1 /作为根目录,多个/开始的路径,只有最后一个有效,前面的被忽略

path.resolve('/a', '/b') // '/b'

3.2.2 总是返回一个以相对于当前的工作目录(working directory)的绝对路径

path.resolve('./a', './b') // '/Users/username/Projects/webpack-demo/a/b'

3.2.3 path.resolve()方法是以程序为根目录,作为起点,根据参数解析出一个绝对路径

console.log(path.resolve()); // 得到应用程序启动文件的目录(得到当前执行文件绝对路径) E:\zf\webpack\1\src
console.log(path.resolve('a','/c')); // E:/c 因为/斜杠代表根目录,所以得到的就是E:/c
console.log(path.resolve(__dirname,'img/so')); // E:\zf\webpack\1\src\img\so 这个就是将文件路径拼接,并不管这个路径是否真实存在。
console.log(path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif')) // E:\zf\webpack\1\src\wwwroot\static_files\gif\image.gif

附Node.js获取项目根目录的小技巧

大家都知道node.js只提供了一个 dirname全局变量,通过 dirname可以获得“C:\wwwroot\yidata\server”。

这时需要用到path。

import path from 'path'; (ES6)或var path = require
(
 'path '
);
path.join(dirname,'../')

即可获取到node.js的项目根目录。

path.join(dirname,'../app/img/favicon.ico')

即可获取目标文件。

总结

到此这篇关于node.js路径处理方法以及绝对路径的文章就介绍到这了,更多相关nodejs路径处理及绝对路径内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
IE6-IE9不支持table.innerHTML的解决方法分享
Sep 14 Javascript
JS控制日期显示的小例子
Nov 23 Javascript
js获取元素外链样式的方法
Jan 27 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
Dec 15 Javascript
javascript的 {} 语句块详解
Feb 27 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
Nov 05 Javascript
Vue.js学习之过滤器详解
Jan 22 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
Jul 31 Javascript
JS兼容所有浏览器的DOMContentLoaded事件
Jan 12 Javascript
vue中post请求以a=a&b=b 的格式写遇到的问题
Apr 27 Javascript
vue异步axios获取的数据渲染到页面的方法
Aug 09 Javascript
基于javascript实现放大镜特效
Dec 03 Javascript
聊一聊JS中的prototype
Sep 29 #Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
Sep 29 #Javascript
jquery对Json的各种遍历方法总结(必看篇)
Sep 29 #Javascript
浅析Javascript的自动分号插入(ASI)机制
Sep 29 #Javascript
完美解决IE9浏览器出现的对象未定义问题
Sep 29 #Javascript
JSON 对象未定义错误的解决方法
Sep 29 #Javascript
Node.js检测端口(port)是否被占用的简单示例
Sep 29 #Javascript
You might like
基于Zend的Config机制的应用分析
2013/05/02 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
PHP版QQ互联OAuth示例代码分享
2015/07/05 PHP
PHP序列化/对象注入漏洞分析
2016/04/18 PHP
PHP实现Redis单据锁以及防止并发重复写入
2018/04/10 PHP
js自定义方法通过隐藏iframe实现文件下载
2013/02/21 Javascript
javascript loadScript异步加载脚本示例讲解
2013/11/14 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
分享一个常用的javascript静态类
2014/12/31 Javascript
jQuery实现防止提交按钮被双击的方法
2015/03/24 Javascript
探讨JavaScript中的Rest参数和参数默认值
2015/07/29 Javascript
微信小程序 progress组件详解及实例代码
2016/10/25 Javascript
JS 调用微信扫一扫功能
2016/12/22 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
简单的vue-resourse获取json并应用到模板示例
2017/02/10 Javascript
vue2 中如何实现动态表单增删改查实例
2017/06/09 Javascript
bootstrapvalidator之API学习教程
2017/06/29 Javascript
vue中keep-alive的用法及问题描述
2018/05/15 Javascript
js实现图片放大并跟随鼠标移动特效
2019/01/18 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
2019/07/03 jQuery
JS多个表单数据提交下的serialize()应用实例分析
2019/08/27 Javascript
JavaScript Array对象基本方法详解
2019/09/03 Javascript
JavaScript setTimeout()基本用法有哪些
2020/11/04 Javascript
python笔记(1) 关于我们应不应该继续学习python
2012/10/24 Python
python日志记录模块实例及改进
2017/02/12 Python
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
2017/07/11 Python
Python实现进程同步和通信的方法
2018/01/02 Python
PyQt5实现拖放功能
2018/04/25 Python
python求质数的3种方法
2018/09/28 Python
Python格式化输出字符串方法小结【%与format】
2018/10/29 Python
windeln官方海外旗舰店:德淘超人气母婴超市
2017/12/15 全球购物
民主生活会对照检查材料思想汇报
2014/09/27 职场文书
大学生自荐信范文
2015/03/05 职场文书
详解Mysql 函数调用优化
2021/04/07 MySQL
python opencv通过按键采集图片源码
2021/05/20 Python