返回顶部
首页 > 资讯 > 精选 >Node.js中Process、Path和File System模块常用 API
  • 888
分享到

Node.js中Process、Path和File System模块常用 API

2023-06-14 11:06:18 888人浏览 薄情痞子
摘要

这篇文章给大家分享的是有关node.js中Process、Path和File System模块常用 api的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。本篇文章给大家介绍一下nodejs中Process、Path

这篇文章给大家分享的是有关node.js中Process、Path和File System模块常用 api的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

本篇文章给大家介绍一下nodejs中Process、Path和File System模块常用 API。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

Node.js中Process、Path和File System模块常用 API

相关推荐:《nodejs 教程

在日常使用 Node 进行开发的时候,会使用到一些文件系统、路径操作等基础 API,这里整理一下,方便大家理解和直接使用。

这里只介绍最常用的那些,不是所有哈,想要看更全的,直接看官方文档就 OK。

尽量不废话,多上代码。

Process 模块


先介绍 process 模块,它提供了当前 Node 进程相关的全局环境信息。在后面的 API 中被用到。

// 内置模块,直接使用const process = require('process');

process.cwd()

这是一个函数,返回当前 Node 进程执行的目录,举例一个常见的场景:

一个 Node 模块 A 通过 NPM 发布,项目 B 中使用了模块 A。在 A 中需要操作 B 项目下的文件时,就可以用 process.cwd() 来获取 B 项目的路径。

const cwd = process.cwd(); // 输出:/Users/xiaolian/Code/node-api-test

process.argv

在终端通过 Node 执行命令的时候,通过 process.argv 可以获取传入的命令行参数,返回值是一个数组

  • 0: Node 路径(一般用不到,直接忽略)

  • 被执行的 JS 文件路径(一般用不到,直接忽略)

  • 2~n: 真实传入命令的参数**

所以,我们只要从 process.argv[2] 开始获取就好了。一般都是这样用

const args = process.argv.slice(2);

直接获取我们想要的参数。

process.env

返回一个对象,存储当前环境相关的所有信息,一般很少直接用到。

一般我们会在 process.env 上挂载一些变量标识当前的环境。比如最常见的用 process.env.NODE_ENV 区分 developmentproduction。在 Vue-cli源码中也经常会看到 process.env.VUE_CLI_DEBUG 标识当前是不是一 DEBUG 模式。

这里提一个 webpack插件 DefinePlugin,在日常的构建流程中,我们经常会通过这个插件来注入不同的全局变量,从而执行不同的构建流程,并且代码中的 process.env.xxx 会被替换成具体的值,在 Terser 压缩阶段会将 deadCode 移除,优化代码体积。

process.platform

这个用的不多,返回当前系统信息,枚举值如下:

console.log(process.platfORM);// 'aix'// 'darwin'  - MacOS// 'freebsd'// 'linux' - linux// 'openbsd'// 'sunos'// 'win32' - windows

Path 模块


// 内置模块,直接使用const path = require('path');

Node 中几乎路径相关的操作都会使用这个模块。

这里就说 5 个最常用的:

path.join(...paths)

path.join 作用是将传入的多个路径拼成一个完整的路径。

const dPath = path.join('template', 'aaa', 'bbb', 'ccc', 'd.js');// 输出: template/aaa/bbb/ccc/d.js

来看一个非常常见的场景,我们需要获取当前项目的 package.JSON 文件,就可以这样获取它的路径:

const pkgPath = path.join(process.cwd(), './package.json');// 输出: /Users/xiaolian/Code/node-api-test/package.json

path.join 可以传入任意个路径,比如:

['package.json', 'README.md'].forEach(fileName => {  const templateFilePath = path.join(process.cwd(), 'template', fileName);  console.log(templateFilePath);});// 输出: /Users/xiaolian/Code/node-api-test/template/package.json// 输出: /Users/xiaolian/Code/node-api-test/template/README.md

path.resolve(...paths)

path.resovlepath.join 的区别在于它的作用是将传入的多个路径和当前执行路径拼接成一个完整的绝对路径。

假设我现在 index.jsscripts 目录下,然后我在根目录下执行 node scripts/index.js,它的代码如下:

const dPath = path.resolve('aaa', 'bbb', 'ccc', 'd.js');// 输出:  /Users/xiaolian/Code/node-api-test/aaa/bbb/ccc/d.js

一般情况下,当 path.resolve 的第一个参数为 ./ 时,可以直接理解和 path.join(processs.cwd(), '') 表现一致。

path.basename(path[, ext])

path.basename 返回指定 path 最后一个路径名,其中第二个参数 ext 可选,表示文件扩展名。比如:

console.log(path.basename('scripts/index.js'));  // index.jsconsole.log(path.basename('scripts/index.js', '.js'));  // 匹配到 .js,返回 indexconsole.log(path.basename('scripts/index.js', '.json'));  // 没匹配到,返回 index.js

path.dirname(path)

path.basename 对应,返回指定 path 最后一个路径名之前的路径。比如:

console.log(path.basename('scripts/index.js'));  // scriptsconsole.log(path.basename('scripts/hook/index.js'));  // scripts/hook

path.extname(path)

path.basename 对应,返回指定 path 最后一个路径名的文件扩展名(含小数点 .)。比如:

console.log(path.basename('scripts/index.js'));  // .jsconsole.log(path.basename('README.md'));  // .md

对比

最后再来对比一下各个路径相关的 API 的区别。

项目 A 的目录结构如下:

├── scripts│   └── index.js├── src│   └── index.js├── package.json├── README.md

scripts/index.js 的代码如下:

const path = require('path');console.log(path.join('package.json'));console.log(path.resolve('package.json'));console.log(path.join('src', 'index.js'));console.log(path.resolve('src', 'index.js'));console.log(path.join(process.cwd(), 'package.json'));console.log(path.resolve('./', 'package.json'));console.log(__filename);console.log(__dirname);

然后,我们在项目 A 的跟目录下执行 node scripts/index.js,结果如下:

-> node scripts/index.jspackage.json/Users/xiaolian/Code/A/package.jsonsrc/index.js/Users/xiaolian/Code/A/src/index.js/Users/xiaolian/Code/A/package.json/Users/xiaolian/Code/A/package.json/Users/xiaolian/Code/A/scripts/index.js/Users/xiaolian/Code/A/scripts

品,仔细品,它们有什么区别。

个人而言,一般还是习惯用 path.join(process.cwd(), 'xxx')

File System 模块


// 内置模块,直接使用const fs = require('fs');

文件系统相关操作的模块,除了 fs 之外,我们还经常用到 fs-extra,后面会介绍。

这个模块在平时的 Node 开发中会被大量使用,这里简单列几个,其它的还是看文档哈:nodejs.org/dist/latest…

fs 模块的 API 默认都是异步回调的形式,如果你想使用同步的方法,有两种解决方法:

  1. 使用 Node 提供的同步 API:xxxSync,也就是在 API 的后面加一个 Sync 后缀,它就是一个同步方法了(具体还是需要查文档哈,是否有提供同步 API)

  2. 包装成一个 Promise 使用

fs.stat(path[, options], callback)

fs.stat() 返回一个文件或者目录的信息。

const fs = require('fs');fs.stat('a.js', function(err, stats) {  console.log(stats);});

其中包含的参数有很多,介绍几个比较常用的:

export interface StatsBase<T> {  isFile(): boolean;                 // 判断是否是一个文件  isDirectory(): boolean;            // 判断是否一个目录  size: T;                           // 大小(字节数)  atime: Date;                       // 访问时间  mtime: Date;                       // 上次文件内容修改时间  ctime: Date;                       // 上次文件状态改变时间  birthtime: Date;                   // 创建时间}

一般我们会使用 fs.stat 来取文件的大小,做一些判断逻辑,比如发布的时候可以检测文件大小是否符合规范。在 CLI 中,经常需要获取一个路径下的所有文件,这时候也需要使用 fs.stat 来判断是目录还是文件,如果是目录则继续递归。当然,现在也有更方便的 API 可以完成这个工作。

同步方法
const fs = require('fs');try {  const stats = fs.statSync('a.js');} catch(e) {}

fs.readdir(path[, options], callback)

fs.readdir(path) 获取 path 目录下的文件和目录,返回值为一个包含 filedirectory 的数组。

假设当前目录为:

.├── a│   ├── a.js│   └── b│       └── b.js├── index.js└── package.json

执行以下代码:

const fs = require('fs');fs.readdir(process.cwd(), function (error, files) {  if (!error) {    console.log(files);  }});

返回值为:

[ 'a',  'index.js',  'package.json' ]

可以看到这里只返回了根目录下的文件和目录,并没有去深度遍历。所以如果需要获取所有文件名,就需要自己实现递归。

同步方法
const fs = require('fs');try {  const dirs = fs.readdirSync(process.cwd());} catch(e) {}

fs.readFile(path[, options], callback)

文件读取的 API,通过 fs.readFile 可以获取指定 path 的文件内容。

入参如下:

  • 第一个参数: 文件路径

  • 第二个参数: 配置对象,包括 encodingflag,也可以直接传如 encoding 字符串

  • 第三个参数: 回调函数

使用方法如下:

const fs = require('fs');const path = require('path');fs.readFile(path.join(process.cwd(), 'package.json'), 'utf-8', function (  error,  content) {  if (!error) {    console.log(content);  }});

如果没传 encoding,则其默认值为 null,此时返回的文件内容为 Buffer 格式。

同步方法
const fs = require('fs');try {  fs.readFileSync(path.join(process.cwd(), 'package.json'), 'utf-8');} catch(e) {}

fs.writeFile(file, data[, options], callback)

对应着读文件 readFilefs 也提供了写文件的 API writeFile,接收四个参数:

  • 第一个参数: 待写入的文件路径

  • 第二个参数: 待写入的文件内容

  • 第三个参数: 配置对象,包括 encodingflag,也可以直接传如 encoding 字符串

  • 第三个参数: 回调函数

使用方法如下:

const fs = require('fs');const path = require('path');fs.writeFile(  path.join(process.cwd(), 'result.js'),  'console.log("Hello World")',  function (error, content) {    console.log(error);  });
同步方法
const fs = require('fs');const path = require('path');try {  fs.writeFileSync(    path.join(process.cwd(), 'result.js'),    'console.log("Hello World")',    'utf-8'  );} catch (e) {}

感谢各位的阅读!关于“Node.js中Process、Path和File System模块常用 API”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: Node.js中Process、Path和File System模块常用 API

本文链接: https://lsjlt.com/news/270612.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Node.js中Process、Path和File System模块常用 API
    这篇文章给大家分享的是有关Node.js中Process、Path和File System模块常用 API的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。本篇文章给大家介绍一下Nodejs中Process、Path...
    99+
    2023-06-14
  • Node.js中process模块常用的属性和方法
    前言 虽然node对操作系统做了很多抽象的工作,但是你还是可以直接和他交互,比如和系统中已经存在的进程进行交互,创建工作子进程。node是一个用于事件循环的线程,但是你可以在这个事件循环之外创建其他的进程(...
    99+
    2022-06-04
    模块 属性 常用
  • Node.js 中常用内置模块(path 路径模块)
    目录前言路径拼接:join方法获取文件名:basename方法获取文件扩展名:extname方法结语前言 进行服务端开发,少不了对各种路径的处理,之前我们是简单粗暴的使用字符串的方法...
    99+
    2024-04-02
  • Node.js常用三大模块之path模块
    目录相对路径和绝对路径概念路径特殊符号path路径模块什么是path路径模块获取路径名path.dirname()路径拼接path.join()获取路径中文件名path.basena...
    99+
    2024-04-02
  • Node.js中path模块,url模块,http模块怎么用
    小编给大家分享一下Node.js中path模块,url模块,http模块怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!path模块Node.js中,提供了一...
    99+
    2023-06-29
  • Node.js中文件操作模块File System的详细介绍
    File System的缩写是fs,该模块提供本地文件的读写能力。 Nodejs导入文件系统模块(fs)语法如下所示: var fs = require("fs"); 异步和同步 Node.js文件系...
    99+
    2022-06-04
    详细介绍 模块 操作
  • Node.js中path模块有什么用
    这篇文章主要为大家展示了“Node.js中path模块有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Node.js中path模块有什么用”这篇文章吧。p...
    99+
    2024-04-02
  • Node.js中的path模块怎么用
    这篇文章主要介绍“Node.js中的path模块怎么用”,在日常操作中,相信很多人在Node.js中的path模块怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Node...
    99+
    2024-04-02
  • 聊聊Node.js path模块中的常用工具函数
    本篇文章带大家聊聊Node中的path模块,介绍一下path的常见使用场景、执行机制,以及常用工具函数,希望对大家有所帮助!在开发过程中,会经常用到 Node.js  ,它利用 V8 提供的能力,拓展了 JS 的能力。而在 Nod...
    99+
    2022-06-09
    path Node 执行机制
  • Node.js中的path模块怎么使用
    这篇“Node.js中的path模块怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Node.js中的path模块怎么...
    99+
    2023-07-05
  • Node.js path模块中的常用工具函数怎么使用
    这篇“Node.js path模块中的常用工具函数怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一...
    99+
    2024-04-02
  • Node.js中的path、os和url模块有什么作用
    本篇内容介绍了“Node.js中的path、os和url模块有什么作用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够...
    99+
    2024-04-02
  • Node.js 中如何使用fs与Path模块
    Node.js 中如何使用fs与Path模块,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。概述:文件系统模块是一个简单包装的标准 POSIX 文件 I/O 操作方法集。可以...
    99+
    2023-06-20
  • node中的path模块和fs模块怎么用
    本篇内容介绍了“node中的path模块和fs模块怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!pa...
    99+
    2024-04-02
  • nodejs文件操作模块FS(File System)常用函数简明总结
    件系统操作相关的函数挺多的。首先可以分为两大类。 一类是异步+回调的。 一类是同步的。 在这里只对异步的进行整理,同步的只需要在函数名称后面加上Sync即可 1. 首先是一类最常规的读写函数,函数名称和形式...
    99+
    2022-06-04
    简明 函数 模块
  • Node中的fs文件模块和path路径模块怎么使用
    这篇“Node中的fs文件模块和path路径模块怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Node中的fs文件模...
    99+
    2023-07-04
  • 解析Node.js异常处理中domain模块的使用方法
    NodeJS 提供了 domain 模块,可以简化异步代码的异常处理。在介绍该模块之前,我们需要首先理解“域”的概念。简单的讲,一个域就是一个 JS 运行环境,在一个运行环境中,如果一个异常没有被捕获,将作...
    99+
    2022-06-04
    使用方法 模块 异常
  • python中常用到的模块和包名称
    1 paramiko  (基于openssh,python封装的ssh)模块python自带用法:import paramiko                                           ssh = paramik...
    99+
    2023-01-31
    中常 模块 名称
  • 如何在ASP.NET中使用NPM模块和API来操作数组?
    ASP.NET是一个强大的Web应用程序框架,它提供了许多功能和工具来帮助您构建高效的Web应用程序。其中一个功能是可以使用NPM模块和API来操作数组。在本文中,我们将介绍如何在ASP.NET中使用NPM模块和API来操作数组。 一、安装...
    99+
    2023-08-25
    npm 数组 api
  • Python 中的 path 模块有哪些常用方法,你是否掌握得足够好?
    Python 是一种非常流行的编程语言,它的应用范围非常广泛,尤其是在数据分析、人工智能和机器学习等领域。在 Python 的标准库中,有一个叫做 path 的模块,它提供了一些方便的函数来处理文件和文件夹路径。在本文中,我们将探讨 Py...
    99+
    2023-08-08
    教程 面试 path
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作