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 ...
随机推荐
- CapsLock魔改大法——变废为宝实现高效编辑
前言 CapsLock,也就是键盘左边中间那个大写锁定.平时很少会用到,跟shift功能重复不谈,更多的时候还会带来各种额外的麻烦. 一直以来的都是一个非常碍事讨厌的存在.就是这么一个垃圾键,偏偏却占 ...
- 转:Windows下交换CapsLock和左ctrl
Windows下交换CapsLock和左ctrlHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout中添加Scanco ...
- JVM性能优化--字节码技术
一.字节码技术应用场景 AOP技术.Lombok去除重复代码插件.动态修改class文件等 二.字节技术优势 Java字节码增强指的是在Java字节码生成之后,对其进行修改,增强其功能,这种方式相当于 ...
- vue-cli3使用svg
(根据网上教程实操,仅作个记录) 执行命令安装插件 npm install svg-sprite-loader --save-dev 在vue.config.js中,添加配置 module.expor ...
- ORACLE表、索引和分区详解
ORACLE表.索引和分区 一.数据库表 每种类型的表都有不同的特性,分别应用与不同的领域 堆组织表 聚簇表(共三种) 索引组织表 嵌套表 临时表 外部表和对象表 1.行迁移 建表过程中可以指定以下两 ...
- 3.用Python画五角星
import turtleimport timeimport os #def draw_square(org_x, org_y, x, y): turtle.setpos(org_x, org_y) ...
- 基于webpack的前端工程化开发解决方案探索(二):代码分割与图片加载
今天我们继续来进行webpack工程化开发的探索! 首先来验证上一篇文章 基于webpack的前端工程化开发解决方案探索(一):动态生成HTML 中的遗留问题:webpack将如何处理按需加载的 ...
- Windows上安装ElasticSearch7
安装JDK1.8(包括)以上版本 安装ElasticSearch ElasticSearch下载地址: https://www.elastic.co/downloads/elasticsearch 双 ...
- 通过公网ip访问虚拟机web服务
工作中有需要进行通过外网ip访问虚拟机上的web服务,通过查阅资料,将配置过程整理如下: 思路:通过路由器的端口映射访问虚拟机上的web服务 1. 前提是在虚拟机上的web服务已经部署好,并且可以通过 ...
- EFK(Elasticsearch+Filebeat+Kibana)收集容器日志
介绍 Elasticsearch 是一个实时的.分布式的可扩展的搜索引擎,允许进行全文.结构化搜索,它通常用于索引和搜索大量日志数据,也可用于搜索许多不同类型的文档. Beats 是数据采集的得力工具 ...