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 相关文章推荐
jquery设置控件位置的方法
Aug 21 Javascript
node.js中的url.parse方法使用说明
Dec 10 Javascript
XML文件转化成NSData对象的方法
Aug 12 Javascript
jQuery实现带有上下控制按钮的简单多行滚屏效果代码
Sep 04 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
Jun 12 Javascript
基于Javascript实现文件实时加载进度的方法
Oct 12 Javascript
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
Apr 13 Javascript
Vuex和前端缓存的整合策略详解
May 09 Javascript
基于vue-element组件实现音乐播放器功能
May 06 Javascript
详解webpack import()动态加载模块踩坑
Jul 17 Javascript
使用angularjs.foreach时return的问题解决
Sep 30 Javascript
Vue动态创建注册component的实例代码
Jun 14 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
PHP中使用crypt()实现用户身份验证的代码
2012/09/05 PHP
php中error与exception的区别及应用
2014/07/28 PHP
PHP打印输出函数汇总
2016/08/28 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
2017/10/25 PHP
准确获得页面、窗口高度及宽度的JS
2006/11/26 Javascript
如何让页面加载完成后执行js
2013/06/26 Javascript
artdialog的图片/标题以及关闭按钮不显示的解决方法
2013/06/27 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
2013/11/22 Javascript
jquery easyui中treegrid用法的简单实例
2014/02/18 Javascript
Jquery easyUI 更新行示例
2014/03/06 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
jquery中ajax使用error调试错误的方法
2015/02/08 Javascript
微信开发 微信授权详解
2016/10/21 Javascript
简单理解vue中track-by属性
2016/10/26 Javascript
react实现pure render时bind(this)隐患需注意!
2017/03/09 Javascript
jQuery Position方法使用和兼容性
2017/08/23 jQuery
详解一个基于套接字实现长连接的express
2019/03/28 Javascript
js获取本日、本周、本月的时间代码
2020/02/01 Javascript
[07:38]2014DOTA2国际邀请赛 Newbee顺利挺进胜者组赛后专访
2014/07/15 DOTA
[00:32]2018DOTA2亚洲邀请赛Newbee出场
2018/04/03 DOTA
[01:09:19]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第二场 2月28日
2021/03/11 DOTA
Python单体模式的几种常见实现方法详解
2017/07/28 Python
详解Python核心编程中的浅拷贝与深拷贝
2018/01/07 Python
Python使用matplotlib的pie函数绘制饼状图功能示例
2018/01/08 Python
python实现连连看辅助之图像识别延伸
2019/07/17 Python
使用tensorboard可视化loss和acc的实例
2020/01/21 Python
Python多线程thread及模块使用实例
2020/04/28 Python
《童趣》教学反思
2014/02/19 职场文书
农村文化活动总结
2014/08/28 职场文书
党的群众路线教育实践活动对照检查材料范文
2014/09/24 职场文书
医生见习报告范文
2014/11/03 职场文书
公务员处分决定书
2015/06/25 职场文书
2016年教师节感恩寄语
2015/12/04 职场文书
教师理论学习心得体会
2016/01/21 职场文书
MySQL普通表如何转换成分区表
2022/05/30 MySQL