Nodejs中的路径问题
一、path核心模块
①path.basename(path【,ext】)获取一个路径中的文件名
var path=require('path');
console.log(path.basename('C:/Files/nodejs/a.js'));//a.js
console.log(path.basename('C:/Files/nodejs/a.js','.js'));//a
②path.dirname(path) 获取一个路径中的目录
var path=require('path');
console.log(path.dirname('C:/Files/nodejs/a.js'));//C:/Files/nodejs
③path.extname(path) 获取一个路径中文件扩展名部分
var path=require('path');
console.log(path.extname('C:/Files/nodejs/a.js'));//.js
④path.isAbsolute(path) 判断一个路径是否为绝对路径,返回布尔值
var path=require('path');
console.log(path.isAbsolute('C:/Files/nodejs/a.js'));//true
console.log(path.isAbsolute('./a.js'));//false
⑤path.parse(path) 把路径解析为一个对象,包含root,dir,base,ext,name属性
var path=require('path');
console.log(path.parse('C:/Files/nodejs/a.js'));
/*
{ root: 'C:/',
dir: 'C:/Files/nodejs',
base: 'a.js',
ext: '.js',
name: 'a' }
*/
⑥path.join([paths]) 进行路径的拼接,不容易出错,为了避免手动拼接带来的低级错误,建议多使用这个方法来辅助拼接
var path=require('path');
console.log(path.join('C:/Files/nodejs','a.js'));//C:\Files\nodejs\a.js
console.log(path.join('C:/Files/nodejs/','/a.js'));//C:\Files\nodejs\a.js
console.log(path.join('C:\\Files\\nodejs','a.js'));//C:\Files\nodejs\a.js
二、动态获取路径的API
①nodejs在每个模块中,除了require、exports等模块相关API外,还有两个特殊的成员,_dirname 和 _filename
②_dirname可以动态获取当前文件模块所属目录的绝对路径,不受执行node目录所属路径的影响
③_filename可以动态获取当前文件的绝对路径,不受执行node目录所属路径的影响

④在文件操作中,使用相对路径是不可靠的,因为在nodejs中文件操作的路径被设计为相对执行node目录所处的路径(不是bug)

⑤所以为了解决这个问题,一个方案可以把相对路径改为固定绝对路径就可以,但是改为固定的绝对路径,如果项目文件移动了位置,执行的时候也会出错,所以也行不通

⑥所以就可以使用_dirname和_filename了,因为这两个API获取的既是绝对路径,又是动态的获取

⑦补充:模块中的路径标识和这里的路径没有关系,不受影响,模块中的路径标识还是相对于文件模块
Nodejs中的路径问题的更多相关文章
- nodejs中npm常用命令
npm install <name>安装nodejs的依赖包 例如npm install express 就会默认安装express的最新版本,也可以通过在后面加版本号的方式安装指定版本, ...
- 在Nodejs中如何调用C#的代码
最近需要在Nodejs中用到C#的代码,从网上了解到可以采用Edgejs来实现Nodejs与C#的代码交互, 直接复制网上的代码运行总是出各种错,填了不少坑,现在把自己的案例代码大致整理一下,方便以后 ...
- (转)nodejs中npm常用命令
npm install <name>安装nodejs的依赖包 例如npm install express 就会默认安装express的最新版本,也可以通过在后面加版本号的方式安装指定版本, ...
- nodejs中Stream的理解
在nodejs中可以通过fs模块读写文件,我们来看下fs模块提供的接口: fs.readFile(filename, callback) 异步读取文件. filename是读取文件的文件名,如果是相对 ...
- 探讨Nodejs中的作用域问题。
在JS中有全局作用域和函数作用域,而在Nodejs中也自己的作用域,分为全局作用域(global)和模块作用域. js作用域: 以前学js的时候我们的全局对象是window,如: var a = 10 ...
- Nodejs基础:路径处理模块path总结
模块概览 在nodejs中,path是个使用频率很高,但却让人又爱又恨的模块.部分因为文档说的不够清晰,部分因为接口的平台差异性. 将path的接口按照用途归类,仔细琢磨琢磨,也就没那么费解了. 获取 ...
- nodeJS中npm常见的命令
常用的nodeJS中npm的命令:npm主要是node包管理和发布的工具.npm常用的命令:1:npm install <name> //(下载包) 下载后的包放在当前路径下面 npm i ...
- nodeJS中的包
前面的话 Node组织了自身的核心模块,也使得第三方文件模块可以有序地编写和使用.但是在第三方模块中,模块与模块之间仍然是散列在各地的,相互之间不能直接引用.而在模块之外,包和NPM则是将模块联系起来 ...
- nodejs中的require,exports使用说明
模块是一门语言编写大项目的基石,因此,了解如何组织.编写.编译.加载模块很重要.这里主要谈谈Node中的模块加载. 1.Node中的模块,主要使用require来加载模块,文件 require(&qu ...
随机推荐
- appium_获取元素状态
元素的属性我们经常会用到,当定位到某个元素后,有时会需要用到这个元素的text值.className.resource-id.checked等. 一般标准的属性我们都可以通过get_attribut ...
- texlive2019安装
TeX Live 是 TUG (TeX User Group) 发布并维护的的 TeX 系统,可以称得上是TeX的官方系统,官网为:https://www.tug.org/texlive/ 1.通过最 ...
- Java jms学习
/** * <html> * <body> * <P> https://github.com/Jasonandy </p> * <p> Al ...
- WPF 判断一个对象是否是设计时的窗口类型,而不是运行时的窗口
原文:WPF 判断一个对象是否是设计时的窗口类型,而不是运行时的窗口 当我们对 Window 类型写一个附加属性的时候,在属性变更通知中我们需要判断依赖对象是否是一个窗口.但是,如果直接判断是否是 W ...
- sql servse 常用维护sql
1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 备份 ...
- 【面试突击】-SpringBoot面试题(一)
Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家. 问题一 Spring Boot.Spring MVC 和 Spring 有什么区别 ...
- 【转载】C#中使用decimal.TryParse方法将字符串转换为十进制decimal类型
在C#编程过程中,将字符串string转换为decimal类型过程中,时常使用decimal.Parse方法,但decimal.Parse在无法转换的时候,会抛出程序异常,其实还有个decimal.T ...
- python基础之猜数字游戏
#猜数字游戏 import random #impor语句导入random模块 guessor=0; print("#"*30) #输出30个”#“(”############## ...
- 两个数组的交集 II
题纲 给定两个数组,编写一个函数来计算它们的交集. 示例 : 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出: [4,9] 说明: 输出结果中每个元素出现的次数 ...
- Celery:First Steps
参考文档:http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html#first-step ...