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 相关文章推荐
一个简单的JavaScript 日期计算算法
Sep 11 Javascript
下载站控制介绍字数显示的脚本 显示全部 隐藏介绍等功能
Sep 19 Javascript
Jquery知识点二 jquery下对数组的操作
Jan 15 Javascript
用js写了一个类似php的print_r输出换行功能
Feb 18 Javascript
原生javascript兼容性测试实例
Jul 01 Javascript
angularJS 如何读写缓冲的方法(推荐)
Aug 06 Javascript
深入理解js中的加载事件
Feb 08 Javascript
JS实现浏览器打印、打印预览示例
Feb 28 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
Apr 24 Javascript
读懂CommonJS的模块加载
Apr 19 Javascript
VUE兄弟组件传值操作实例分析
Oct 26 Javascript
vue组件内部引入外部js文件的方法
Jan 18 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
《斗罗大陆》六翼天使武魂最强,为什么老千家不是上三宗?
2020/03/02 国漫
php注入实例
2006/10/09 PHP
PHP 用数组降低程序的时间复杂度
2009/12/04 PHP
php && 逻辑与运算符使用说明
2010/03/04 PHP
关于php mvc开发模式的感想
2011/06/28 PHP
学习php设计模式 php实现原型模式(prototype)
2015/12/07 PHP
PDO的安全处理与事物处理方法
2016/10/31 PHP
JavaScript 模仿vbs中的 DateAdd() 函数的代码
2007/08/13 Javascript
用JS操作FRAME中的IFRAME及其内容的实现代码
2008/07/26 Javascript
jquery 插件学习(三)
2012/08/06 Javascript
jquery实现图片裁剪思路及实现
2013/08/16 Javascript
js setTimeout()函数介绍及应用以倒计时为例
2013/12/12 Javascript
JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
2013/12/31 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
2014/06/15 Javascript
基于jquery实现人物头像跟随鼠标转动
2015/08/23 Javascript
Javascript的比较汇总
2016/07/25 Javascript
JS简单随机数生成方法
2016/09/05 Javascript
基于滚动条位置判断的简单实例
2017/12/14 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
2021/01/20 Vue.js
vue中h5端打开app(判断是安卓还是苹果)
2021/02/26 Vue.js
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
Python编程中字符串和列表的基本知识讲解
2015/10/14 Python
在Windows中设置Python环境变量的实例讲解
2018/04/28 Python
python使用selenium爬虫知乎的方法示例
2020/10/28 Python
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
考试作弊检讨书大全
2014/02/18 职场文书
销售内勤岗位职责
2014/04/15 职场文书
学习十八大宣传标语
2014/10/09 职场文书
党的群众路线教育实践活动批评与自我批评发言稿
2014/10/16 职场文书
2014年团支书工作总结
2014/11/14 职场文书
2015中学教师个人工作总结
2015/07/22 职场文书
先进基层党组织主要事迹材料
2015/11/03 职场文书
公文格式,规则明细(新手收藏)
2019/07/23 职场文书
2020年基层司法所建设情况调研报告
2019/11/30 职场文书
springboot集成springCloud中gateway时启动报错的解决
2021/07/16 Java/Android
html中两种获取标签内的值的方法
2022/06/16 jQuery