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实现关联数据(Linked Data)查询及注意细节
Feb 22 Javascript
页面js遇到乱码问题的解决方法是和无法转码的情况
Apr 30 Javascript
举例简介AngularJS的内部语言环境
Jun 17 Javascript
Function.prototype.apply()与Function.prototype.call()小结
Apr 27 Javascript
AngularJS 表达式详细讲解及实例代码
Jul 26 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
Nov 10 Javascript
JavaScript使用FileReader实现图片上传预览效果
Mar 27 Javascript
详解vue-cli+element-ui树形表格(多级表格折腾小计)
Apr 17 Javascript
vue路由守卫+登录态管理实例分析
May 21 Javascript
vue请求服务器数据后绑定不上的解决方法
Oct 30 Javascript
vue实现数字动态翻牌的效果(开箱即用)
Dec 08 Javascript
JS+canvas五子棋人机对战实现步骤详解
Jun 04 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正则匹配汉字的方法介绍
2013/04/25 PHP
php实现图片缩放功能类
2013/12/18 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
PHP大文件分割分片上传实现代码
2020/12/09 PHP
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
node.js中的fs.ftruncate方法使用说明
2014/12/15 Javascript
使用JS 插件qrcode.js生成二维码功能
2017/02/20 Javascript
jQuery ajax请求struts action实现异步刷新
2017/04/19 jQuery
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
2018/08/19 Javascript
vue监听对象及对象属性问题
2018/08/20 Javascript
从零开始封装自己的自定义Vue组件
2018/10/09 Javascript
vue使用swiper实现中间大两边小的轮播图效果
2019/11/24 Javascript
[43:18]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
pygame学习笔记(5):游戏精灵
2015/04/15 Python
Python合并字符串的3种方法
2015/05/21 Python
详解duck typing鸭子类型程序设计与Python的实现示例
2016/06/03 Python
python 上下文管理器使用方法小结
2017/10/10 Python
Python实现生成随机数据插入mysql数据库的方法
2017/12/25 Python
详解Django rest_framework实现RESTful API
2018/05/24 Python
TensorFlow实现Logistic回归
2018/09/07 Python
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
2019/02/21 Python
python生成requirements.txt的两种方法
2019/09/18 Python
python内置函数sorted()用法深入分析
2019/10/08 Python
Python面向对象原理与基础语法详解
2020/01/02 Python
Python Socketserver实现FTP文件上传下载代码实例
2020/03/27 Python
python的help函数如何使用
2020/06/11 Python
TensorFlow中如何确定张量的形状实例
2020/06/23 Python
地球上最先进的胡子和头发修剪器:Bevel
2018/01/23 全球购物
澳大利亚最超值的自行车之家:Reid Cycles
2019/03/24 全球购物
小学教师的个人自我鉴定
2013/10/26 职场文书
给公司的建议书范文
2014/05/13 职场文书
学生违反校规检讨书
2014/10/28 职场文书
同学聚会开幕词
2019/04/02 职场文书
二手手机买卖合同范本(2019年版)
2019/10/28 职场文书