path 模块

Node.js中内置的fs模块和path模块 假如把02文件删除, 让03.xxx文件名变成02.xxx, 04.xxx变成03.xxx, 后面的文件名依次类推。语法: fs.writeFile(file,data[,options],callback)把下图的文件名, 数字小于10的格式改成01这种。fs.writeFile方法也可以实现追加写入。fs模块相对路径的参照物: 命令行的工作目录。fs 全称file system。 阅读详情


在 Node.js 开发中,文件路径的处理是一个绕不开的话题。无论是读取配置文件、写入日志,还是模块导入,都需要精准操作文件路径。然而,不同操作系统的路径规则(比如 Windows 的\和 Unix 的/)、相对路径与绝对路径的转换、路径片段的拼接等问题,很容易让开发者陷入 “路径陷阱”。

Node.js 内置的path模块正是为解决这些问题而生 —— 它提供了一套跨平台、规范化的路径处理工具,让我们无需关心底层操作系统的差异,就能写出健壮的路径处理代码。本文将全面解析path模块的核心 API、使用场景、常见陷阱与最佳实践,帮你彻底掌握路径处理的精髓。

一、path 模块简介

path是 Node.js 的核心模块(无需额外安装),通过require('path')(CommonJS)或import path from 'path'(ES 模块)即可引入。它的主要作用是:

  • 处理和转换文件 / 目录路径

  • 屏蔽不同操作系统的路径差异(自动适配\或/)

  • 提供路径解析、拼接、分割等标准化方法

无论是开发工具库、Web 服务还是 CLI 工具,path模块都是处理路径的首选方案。

二、核心 API 详解

path模块提供了十几个实用方法,其中以下几个是日常开发中最常用的,我们逐一解析:

1. path.resolve:生成绝对路径(最常用)

path.resolve()的作用是将多个路径片段拼接为一个规范化的绝对路径,其语法为:

path.resolve([...paths]);

核心特性:

  • 接收任意个路径片段作为参数,从右向左解析,遇到绝对路径时停止(以此为基准拼接)

  • 若所有参数都是相对路径,会以当前工作目录(process.cwd())为基准生成绝对路径

  • 自动处理路径中的.(当前目录)、..(上一级目录)和多余的分隔符

示例解析:

const path = require('path')

// 以__dirname(当前文件所在目录的绝对路径)为基准拼接
console.log(path.resolve(__dirname, 'text.txt'))
// 输出:d:\project\code\text.txt(Windows)或 /project/code/text.txt(Unix)

// 省略./也能正确解析(推荐写法)
console.log(path.resolve(__dirname, './logs', 'app.log'))
// 输出:d:\project\code\logs\app.log​

// 遇到绝对路径参数时,以该绝对路径为基准
console.log(path.resolve('/user', 'docs', 'note.txt'))
// 输出:d:\user\docs\note.txt(Windows)或 /user/docs/note.txt(Unix)

// 处理..(上一级目录)
console.log(path.resolve('/a/b/c', '../d'))
// 输出:/a/b/d(Unix)

注意点:

  • 路径片段中若单独出现/(如path.resolve(__dirname, '/file.txt')),在 Windows 中会被解析为根目录(如d:\file.txt),在 Unix 中会被解析为系统根目录(如/file.txt),需特别注意!

  • 推荐使用__dirname(当前文件目录绝对路径)作为基准,而非process.cwd()(当前工作目录,可能随执行命令的位置变化)。

2. path.join:拼接路径片段(不强制绝对路径)

path.join()的作用是将多个路径片段拼接为规范化的路径字符串(可能是相对路径),语法:

path.join([...paths])

核心特性:

  • 按顺序拼接路径片段,不强制生成绝对路径(输出可能是相对路径)

  • 自动处理.、..和多余的分隔符,跨平台兼容

  • 不会解析绝对路径基准(即使片段中包含/,也仅作为分隔符处理)

示例解析:

// 拼接相对路径片段
console.log(path.join('src', 'utils', 'format.js'))
// 输出:src/utils/format.js(Unix)或 src\utils\format.js(Windows)

// 处理..(上一级目录)
console.log(path.join('/a', 'b', '../c'))
// 输出:/a/c(Unix)

// 片段中的/仅作为分隔符,不视为绝对路径基准
console.log(path.join('docs', '/guides', 'intro.md'))
// 输出:docs/guides/intro.md(Unix)

3. path.resolve vs path.join:关键区别

这两个 API 是最容易混淆的,我们用表格和案例明确差异:

维度path.resolvepath.join
输出类型绝对路径(强制)拼接后的路径(可能是相对路径)
解析逻辑从右向左,遇到绝对路径则以此为基准按顺序拼接,不解析绝对路径基准
依赖基准目录是(默认当前工作目录)否(仅拼接片段)
典型用途读取文件、确定实际路径(依赖基准目录)构建路径片段(如拼接相对路径)

对比案例:

// 同样的参数,输出差异
console.log(path.resolve('a', 'b'))
// 输出:/当前工作目录/a/b(绝对路径,如 /Users/project/a/b)

console.log(path.join('a', 'b'))
// 输出:a/b(相对路径)

// 遇到绝对路径片段时
console.log(path.resolve('a', '/b', 'c'))
// 输出:/b/c(以/b为基准,忽略前面的a)

console.log(path.join('a', '/b', 'c'))
// 输出:a/b/c(仅拼接,/被当作分隔符)

4. path.sep:获取操作系统的路径分隔符

不同操作系统的路径分隔符不同:

  • Windows 使用\(反斜杠)

  • Unix(Linux、macOS)使用/(正斜杠)

path.sep会返回当前系统的路径分隔符,用于动态处理路径拼接(避免硬编码\或/)。

示例:

console.log(path.sep)
// Windows输出:\
// Unix输出:/

// 动态拼接路径(跨平台兼容)
const dirs = ['user', 'docs', 'notes']

console.log(dirs.join(path.sep))
// Windows输出:user\docs\notes
// Unix输出:user/docs/notes

5. path.parse:解析路径为对象

path.parse()能将一个路径字符串解析为包含路径各部分信息的对象,语法:

path.parse(pathString)

返回对象的结构:

  • root:根目录(如d:\或/)

  • dir:完整目录路径(包含 root)

  • base:文件名 + 扩展名(如app.js)

  • name:文件名(如app)

  • ext:扩展名(如.js)

示例:

const filePath = 'd:\project\src\utils\format.js'
const parsed = path.parse(filePath)
console.log(parsed)

//  输出:
/* {
  root: 'd:\',
  dir: 'd:\project\src\utils',
  base: 'format.js',
  name: 'format',
  ext: '.js'
} */

用途:快速提取路径中的文件名、扩展名或目录,比如批量处理文件时筛选特定类型的文件。

6. path.basename:获取路径的基础名称

path.basename()用于获取路径中的最后一部分(通常是文件名),语法:

path.basename(path[, ext]) // ext为可选参数,若指定则去除扩展名

示例:

const filePath = '/usr/local/bin/node.exe';

// 输出:node.exe
console.log(path.basename(filePath));

// 输出:node
console.log(path.basename(filePath, '.exe'));

用途:日志记录中提取文件名、上传文件时获取原始文件名等。

7. path.dirname:获取路径的目录名

path.dirname()返回路径中除最后一部分外的目录路径,语法:

path.dirname(path)

示例:

const filePath = 'd:\code\app\main.js'

console.log(path.dirname(filePath))
// 输出:d:\code\app

用途:根据文件路径获取其所在目录,比如读取文件后需要在同目录写入新文件。

8. path.extname:获取路径的扩展名

path.extname()返回路径中的扩展名(包含.),若没有扩展名则返回空字符串,语法:

path.extname(path)

示例:

// 输出:.png
console.log(path.extname('image.png'));

// 输出:.gz(只取最后一个.后的部分)
console.log(path.extname('data.tar.gz'));

// 输出:''(无扩展名)
console.log(path.extname('README'));

用途:判断文件类型(如上传文件时验证扩展名)、批量修改文件扩展名等。

9. 其他实用 API

  • path.isAbsolute:判断是否为绝对路径
console.log(path.isAbsolute('/usr/bin')); // true(Unix)

console.log(path.isAbsolute('d:\code')); // true(Windows)

console.log(path.isAbsolute('./test')); // false
  • path.normalize:规范化路径(处理冗余分隔符和..)
console.log(path.normalize('/a//b/c/../d'));

// 输出:/a/b/d(Unix)

三、ES 模块中的路径处理

现代 Node.js 项目越来越多地使用 ES 模块(import语法),而 ES 模块中没有__dirname和__filename这两个 CommonJS 变量。此时需要通过import.meta.url结合url模块的fileURLToPath方法获取路径:

// ES模块中获取当前文件目录的绝对路径
import { fileURLToPath } from 'url'
import { dirname, resolve } from 'path'

// 获取当前文件的绝对路径(类似__filename)
const __filename = fileURLToPath(import.meta.url)

// 获取当前文件所在目录的绝对路径(类似__dirname)
const __dirname = dirname(__filename)

// 后续使用和CommonJS一致
console.log(resolve(__dirname, 'config.js'))
// 输出:当前文件目录/config.js的绝对路径

四、使用场景与最佳实践

1. 读取 / 写入文件时拼接路径

const fs = require('fs').promises
const path = require('path')

// 拼接配置文件路径(基于当前文件目录)
const configPath = path.resolve(__dirname, 'config', 'app.json')

// 异步读取文件
async function readConfig () {
  try {
    const data = await fs.readFile(configPath, 'utf8')
    return JSON.parse(data)
  } catch (err) {
    console.error('读取配置失败:', err)
  }
}

2. 批量处理文件时提取信息

const path = require('path')

const files = [
  'd:\images\photo.jpg',
  'd:\docs\report.pdf',
  'd:\logs\app.log'
]

files.forEach(file => {
  console.log('文件名:', path.basename(file))
  console.log('类型:', path.extname(file))
  console.log('所在目录:', path.dirname(file))
  console.log('---')
});

3. 跨平台路径兼容处理

避免硬编码\或/,使用path.sep或path.join动态拼接:

// 错误写法(仅Windows可用)
const badPath = __dirname + '\data\file.txt';

// 正确写法(跨平台兼容)
const goodPath = path.join(__dirname, 'data', 'file.txt');

4. 封装实用工具函数

基于path模块封装常用工具,提高复用性:

const path = require('path')

// 1. 获取文件所在目录的绝对路径
const getFileDir = (filePath) => {
  return path.isAbsolute(filePath)
    ? path.dirname(filePath)
    : path.resolve(process.cwd(), path.dirname(filePath))
}

// 2. 判断是否为图片文件(基于扩展名)
const isImageFile = (filePath) => {
  const ext = path.extname(filePath).toLowerCase()
  return ['.jpg', '.jpeg', '.png', '.gif', '.webp'].includes(ext)
}

// 3. 拼接项目根目录下的路径(假设当前文件在src/utils下)
const getRootPath = (...paths) => {
  // 从当前目录向上两级找到项目根目录
  return path.resolve(__dirname, '..', '..', ...paths)
}

// 使用示例
console.log(getFileDir('docs/readme.md')) // 输出:当前工作目录/docs
console.log(isImageFile('pic.png')) // 输出:true
console.log(getRootPath('public', 'index.html')) // 输出:项目根目录/public/index.html

五、常见错误与避坑指南

1. 直接用字符串拼接路径

错误写法:

const filePath = __dirname + '/data/file.txt';
// Windows下会生成 d:\project\code/data/file.txt(混合/和\)

原因:不同系统分隔符不同,手动拼接易导致路径格式混乱。

正确写法:用path.join或path.resolve:

const filePath = path.join(__dirname, 'data', 'file.txt');

2. 误用 process.cwd () 作为基准路径

错误场景:在 CLI 工具中,用户从不同目录执行命令时,process.cwd()(当前工作目录)会变化,导致路径错误。

示例:

// 假设文件位于 /project/src/utils.js
// 用户在 /project 目录执行:node src/utils.js → process.cwd() 为 /project
// 用户在 / 目录执行:node project/src/utils.js → process.cwd() 为 /

console.log(path.resolve(process.cwd(), 'config.json'));

// 前者输出 /project/config.json(正确),后者输出 /config.json(错误)

解决:优先使用__dirname(文件所在目录,固定不变)作为基准。

3. 用 path 模块处理 URL 路径

错误场景:试图用path处理 HTTP URL(如https://example.com/path/file)。

原因:path模块仅用于本地文件路径,URL 路径的解析规则不同(如查询参数、哈希等)。

正确做法:用URL构造函数处理 URL 路径:

const url = new URL('/path/file?name=test', 'https://example.com');

console.log(url.pathname); // 输出:/path/file

4. 忽略路径中的… 导致安全问题

风险:用户输入的路径可能包含..,若直接拼接可能访问到预期外的目录(如../../etc/passwd)。

解决:用path.resolve结合项目根目录规范化路径,限制访问范围:

const userInput = '../../secret'
const baseDir = path.resolve(__dirname, 'public') // 允许访问的根目录
const realPath = path.resolve(baseDir, userInput)

// 验证路径是否在baseDir范围内
if (!realPath.startsWith(baseDir)) {
  throw new Error('路径越界,禁止访问')
}

六、总结

path模块是 Node.js 处理文件路径的 “瑞士军刀”,它通过一套简洁的 API 屏蔽了操作系统差异,解决了路径拼接、解析、规范化等核心问题。无论是 CommonJS 还是 ES 模块,掌握path.resolve、path.join、path.parse等核心方法,结合动态路径变量(如__dirname、import.meta.url),能让你的代码更健壮、更易维护。

避开直接拼接路径、误用基准目录等常见陷阱,同时封装实用工具函数,能让路径处理从繁琐的体力活变成优雅的编程实践。希望本文能帮你彻底掌握path模块,在实际开发中少走弯路。

《web开发: (Node.js)path 路径模块》 一、Node.js path 路径模块 1 什么是 path 路径模块 path 模块是 Node.js 官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理需求 path.join() 方法,用来将多个路径片段拼接成一个完整的路径字符串 path.basename() 方法,用来从路径字符串中,将文件名解析出来 如果要在 JavaScript 代码中,使用 path 模块来处理路径,则需要使用如下的方式先导入它: 2 路径拼接 1. path.join() 阅读详情

相关推荐

Node内置模块 【path模块】

Node内置模块 【path模块】

商务合作/软件定制/学习交流 651

【Node.js】深度解析常用核心模块-path模块

path 模块是 Node.js 官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理需求。

前端小白在前进的博客 2907

树莓派4在Bookworm Raspbian系统下无法进入桌面模式(启动后出现彩色画面,然后一直黑屏,但是可以正常启动和ssh)

本文记录了这段比较坎坷的探索之路,由于你的问题不一定是我最终解决方案的,可能是前面探索路上试过的,所以建议按顺序看排除前置问题。 双十一又买了个树莓派 4B,插上之前树莓派 4B 的 TF 卡直接就能使用(毕竟是一样规格的)。但是由于用来连接硬盘的 USB 线是坏的,我以为是系统问题就进行了重装(所以坏掉的线还是直接扔了好)。 重新安装系统就装了最新的 2023-10-10 版本的 64 位的 Raspberry Pi OS,但是出现了一个问题: 启动后出现彩色画面,然后一直黑屏。

ZhongUncle的博客 3735

Nodejs—path 路径模块

index首页

m0_59451453的博客 4156

Workbench中基于nCode的列车转向架随机振动疲劳寿命预测方法

本文详细介绍了在ANSYS Workbench中结合nCode进行列车转向架随机振动疲劳寿命预测的完整方法。通过几何清理、模态分析、PSD载荷定义及随机振动求解,并重点阐述了nCode中Dirlik等疲劳算法的选择与应用,为轨道交通关键部件的可靠性设计提供了系统的仿真分析流程与工程实践指导。

weixin_29234423的博客 473

基于COMSOL电弧动态仿真模型优化:高收敛性可修改吹弧方案解析

在多物理场耦合分析中,电弧动态仿真历来是数值稳定性的难点:温度从室温跃升至数万开尔文,电导率随温度呈数量级跳变,流动、传热与电磁场相互牵制,极易引发求解器不收敛或初始值不一致等问题。如何构建高收敛性的数值模型,成为开关设备灭弧性能优化的重要技术基础。通过合理的几何简化、全耦合求解器配置、辅助扫描初始化策略以及参数化建模手段,可以实现对吹弧方案的灵活调整与批量寻优,从而系统性评估气流速度、喷口形状、触头间距等关键因素对熄弧性能的影响。这类仿真方法广泛应用于断路器、接触器等高压电器产品研发,为灭弧室结构设计提供

weixin_29758911的博客 350

path 路径模块

path 模块是 Node.js 官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理需求。

weixin_55697644的博客 204

GD32模拟IIC读写DVC1124

GD32模拟IIC读写集澈AFE芯片DVC1124

ponyma_的博客 1226

path路径模块

path路径模块

shanhai111111的博客 547

Windows 11 上 WSL2 安装 Ubuntu 22.04 保姆级教程(含桌面环境配置)

本文提供在Windows 11上通过WSL2安装Ubuntu 22.04并配置桌面环境的详细教程。涵盖WSL2核心安装、性能调优、Xfce桌面环境部署以及开发环境集成,帮助开发者构建高效、无缝的Windows-Linux混合开发工作站。

Jerry的专栏 633

ubuntu20.04开机黑屏卡在/dev/sda1:clean,***files,***blocks,解决心得记录

这个问题如果你百度,会发现目前有很多种解决方法。 有更新显卡驱动的,有卸载上一次安装软件的,还有各种奇奇怪怪的故障原因。 如果你是属于上述情况,那么按照百度和论坛的各种指引操作一般都能解决。 但我这里主要说一种特殊情况,就是我什么也没有操作,我什么也没干。就是正常使用系统关了机突然就报错了。 这也是自己亲自遇到的问题,做个小记录方便以后自己回顾。 上一次出现这种情况我重装系统了,这次用了两个月又出现了,重装成本太高,我接受不了,于是找到解决办法。 首先找个终端进入,进入终端的方法很多,用安装u盘

qq_41517017的博客 2万+

【Node.js】path 模块详解

path模块是 Node.js 的核心模块之一,主要用于操作和处理文件路径。无论是在开发服务器应用,还是处理文件上传、下载等任务时,路径操作都是非常常见的需求。path模块提供了一系列便捷的方法来简化这些任务。Node.js 的path模块提供了丰富且强大的路径操作功能。通过使用这些方法,开发者可以更加高效、便捷地管理文件和目录路径,尤其是在跨平台开发中,path模块的统一 API 大大简化了路径处理的复杂性。希望本文能帮助你深入了解path模块,在项目中更好地运用它。

lph159的博客 2131

项目回顾一:《高速多端口共享缓存模块》

本帖子仅为了回顾一下一年前自己动手完成的第一个数字ic设计项目的历程,为复试做一下准备,完成的这个sramc模块花了整整四个月的时间,从0到12个模块的代码产出以及模块的验证,虽然没有拿奖,也没有进入复赛,设计过程中使用的技术手段和算法也不太成熟,但这这是一个值得记录的过程!

weixin_60261760的博客 1254

nodejs的path模块

path模块是Node.js官方提供的,用来处理路径的模块。提供一系列的方法和属性,用来满足用户对路径的处理需求。例如:如果在js代码中,使用path模块来处理路径,需要先导入。

weixin_55355282的博客 1782

2025年开源气象大模型的实现原理与实践指南

气象大模型在人工智能时代实现了革命性突破,通过深度学习技术以更低的计算成本达到甚至超越传统数值天气预报的精度。开源气象大模型的出现使得全球研究者和机构都能参与气象AI的创新。本文详细解析了开源气象大模型的实现原理,包括核心架构、数据准备、训练方法和实际预测流程,并提供了实践指南。核心架构主要采用Transformer、图神经网络和扩散模型,处理多模态数据融合和时空联合建模。数据体系构建涉及数据来源、预处理和增强策略。模型训练关键技术包括损失函数设计、分布式训练优化和训练过程监控。微调与领域适应策略包括迁移学

专注AI大模型,软件混淆,授权 1181

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

path 模块——使用 path 处理路径的详细教程

Node.js path 模块用于处理文件和目录路径,解决不同操作系统的路径格式差异。本文详细介绍 path.join()、path.resolve()、path.basename()、path.dirname()、path.extname()、path.parse()、path.format() 和 path.isAbsolute() 等常用方法,并提供完整的代码示例,适用于跨平台路径管理。学习 path 模块可以提高 Node.js 开发效率,使文件操作更加规范和便捷。

2402_84971234的博客 1649

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

path模块

const path = require('path'); Windows 与 POSIX path.basename(path[, ext]) path <string> ext <string> 可选的文件扩展名。 返回: <string> ath.basename()方法返回path的最后一部分 path.basename('/fo...

jiaoqi6132的博客 990

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

path模块 fs模块

// 操作路径: // 核心模块 path: // 1)引用核心模块 path let path = require(‘path’) // 2)处理路径: var pathStr = ‘C:/Users/91300/Desktop/nodejs/day02/4-code/00.txt’ // 得到文件名 00.txt let basename = path.basename(pathStr) console.log(basename) // 得到后缀名 .txt let extname = path.ext

weixin_44478972的博客 251

nodejs中path模块

模块介绍(转官方文档) path模块的默认操作,因 Node.js 应用程序运行所在的操作系统而异。 具体来说,当在 Windows 操作系统上运行时, path 模块将假定正在使用 Windows 风格的路径。 因此,使用 path.basename() 可能会在 POSIX 和 Windows 上产生不同的结果: 在POSIX上: path.ba...

weixin_33994444的博客 137

Node.js path 模块详解

一、path 模块概述1. 模块介绍path 模块是 Node.js 的核心模块之一,主要用于操作和处理文件路径。无论是在开发服务器应用,还是处理文件上传、下载等任务时,路径操作都是非常常见的需求。path 模块提供了一系列便捷的方法来简化这些任务。2. 模块引入方式由于 path 是 Node.js 的核心模块,不需要额外安装,直接使用 require 语句即可引入。

m0_70547044的博客 1664

Node path模块

对于前端开发的同学相信大家都会用过path这个模块去解析路径,比较遗憾的是,以往都只是百度其某个方法的用法,没有完整的去看过接口文档,导致现在阅读一些代码的时候碰到path的其他方法一脸懵逼,所以趁着项目不忙去看了一下官方文档并做个笔记。以下示例大多来自官方文档。 path.basename(path) 参数: arg1:字符串类型路径(非字符串类型报错) arg2:可选参数,文件拓展名 ...

paper_crane的博客 570

node path html模块,Nodejs path模块

这是一篇读Nodejs API的读书笔记(抄书笔记)path模块小总结:ext 扩展名base 文件全名dir 路径名(不包括文件名)delimiter 分隔符root 你懂的----------------------------------------path 路径 用win32、posixpath.basename(path[, ext])返回最后一部分如index.html, ext为扩展...

weixin_39612720的博客 160

细说nodejs的path模块

path 模块是 nodejs 中用于处理文件/目录路径的一个内置模块,可以看作是一个工具箱,提供诸多方法供我们使用,当然都是和路径处理有关的。同时在前端开发中 path 模块出现的频率也是比较高的,比如配置 webpack 的时候等。本文是对该模块中一些常用的方法进行介绍,走,一起学习下吧。需要注意下,nodejs 中所有的模块(内置,自定义)都需要使用 requier 进行导入,一般导入位置在文件顶部。

m0_67614517的博客 1713

Path模块

path 模块提供了。

前端笔记——放弃很容易,但坚持一定很酷 588
上一篇: fs 模块(文件系统)
下一篇: HTTP 协议
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值