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 相关文章推荐
JS宝典学习笔记(下)
Jan 10 Javascript
jquery checkbox全选、取消全选实现代码
Mar 05 Javascript
JS中的异常处理方法分享
Dec 22 Javascript
使用JavaScript进行进制转换将字符串转换为十进制
Sep 21 Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
Dec 28 Javascript
vue-loader教程介绍
Jun 14 Javascript
Vue 2.0的数据依赖实现原理代码简析
Jul 10 Javascript
vue中的计算属性的使用和vue实例的方法示例
Dec 04 Javascript
完美解决axios跨域请求出错的问题
Feb 05 Javascript
在Vue项目中引入腾讯验证码服务的教程
Apr 03 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
Sep 04 Javascript
浅谈react-router@4.0 使用方法和源码分析
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写的小东西
2006/12/06 PHP
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
php学习笔记 面向对象的构造与析构方法
2011/06/13 PHP
JS查看对象功能代码
2008/04/25 Javascript
Javascript var变量隐式声明方法
2009/10/19 Javascript
JS实现悬浮移动窗口(悬浮广告)的特效
2013/03/12 Javascript
jQuery each函数源码分析
2016/05/25 Javascript
js 连续赋值的简单实现
2016/06/13 Javascript
详解vue中使用express+fetch获取本地json文件
2017/10/10 Javascript
基于jquery的on和click的区别详解
2018/01/15 jQuery
Angular开发实践之服务端渲染
2018/03/29 Javascript
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
代码分析vue中如何配置less
2018/09/28 Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
2018/10/15 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
2019/04/12 Javascript
微信小程序连续签到7天积分获得功能的示例代码
2020/08/20 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
2021/01/28 Javascript
[00:09]DOTA2新版本PA至宝特效动作展示
2014/11/19 DOTA
Python基础知识_浅谈用户交互
2017/05/31 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
Django values()和value_list()的使用
2020/03/31 Python
使用darknet框架的imagenet数据分类预训练操作
2020/07/07 Python
python3实现简单飞机大战
2020/11/29 Python
css3实现蒙版弹幕功能
2019/06/18 HTML / CSS
德国百年厨具品牌WMF美国站:WMF美国
2016/09/12 全球购物
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
大二自我鉴定范文
2013/10/05 职场文书
护士岗前培训自我评鉴
2014/02/28 职场文书
亚运会口号
2014/06/20 职场文书
土建施工员岗位职责
2014/07/16 职场文书
食品安全承诺书范文
2014/08/29 职场文书
学雷锋的心得体会
2014/09/04 职场文书
2015年小学财务工作总结
2015/07/20 职场文书
股东出资协议书
2016/03/21 职场文书
攻击最高的10只幽灵系神奇宝贝,坚盾剑怪排第一,第五最为可怕
2022/03/18 日漫