更新时间:2022-02-12 13:16:39
我想给大家解释一下node.js中常用的Process、Path和FileSystem模块的API,相信朋友们也应该密切关注这个话题。现在,我将告诉您node.js中常用的Process、Path和FileSystem模块的API。边肖还收集了node.js中常用的Process、Path和FileSystem模块的API的相关信息。希望您看到后会喜欢。
本文介绍了Nodejs中进程、路径和文件系统模块中常用的API。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
相关建议:《nodejs 教程》
一些基本的应用编程接口,如文件系统和路径操作,将在Node的日常开发中使用。我们在这里整理一下,方便大家理解和直接使用。
这里只介绍最常用的,并不是全部。如果你想看更完整的,看看官方文件就可以了。
尽量不要废话,多加代码。
流程模块首先介绍流程模块,流程模块提供与当前Node流程相关的全局环境信息。在后面的API中使用。
//直接使用的内置模块
const process=require(' process ');这是一个返回当前节点进程正在执行的目录的函数。以一个常见的场景为例:
通过NPM发布了一个Node模块A,在项目B中使用了模块A,当需要在A中操作项目B下的文件时,可以使用process.cwd()获取项目B的路径
const CWD=process . CWD();//输出:/users/连笑/code/Node-API-testprocess . argv终端通过节点执行命令时,可以通过进程获取传入的命令行参数. argv返回值为数组:
0:节点路径(一般不需要,直接忽略)1:要执行的JS文件路径(一般不需要,直接忽略)2 ~ N3360真实传入命令的参数* *所以,我们只需要从process.argv[2]中获取即可一般是这样使用的:
const args=process . argv . slice(2);直接获取我们想要的参数。
Process.env返回一个存储与当前环境相关的所有信息的对象,很少直接使用。
通常,我们会在process.env上挂载一些变量来识别当前的环境。例如,区分开发和生产最常用的方法是process.env.NODE_ENV在vue-cli的源代码中,经常可以看到process.env.VUE_CLI_DEBUG标志当前是DEBUG模式。
这里有一个webpack插件定义了一个插件。在日常的构建过程中,我们经常会通过这个插件注入不同的全局变量来执行不同的构建过程,代码中的process.env.xxx会被替换为特定的值。在Terser压缩阶段,将删除deadCode以优化代码量。
Process.platform使用不多。它返回当前的系统信息。枚举值如下:
console . log(process . platform);
//“AIX”
//‘达尔文’——MAcos
//“FreeBSD”
//'linux' - linux
//“open BSD”
//“sunos”
//'win32'-windowsPath模块//内置模块,可以直接使用
const path=require(' path ');Node中几乎所有与路径相关的操作都将使用该模块。
以下是五种最常用的方法:
Path.join(.path)path . join用于将多个传入路径拼合成一个完整的路径。
const dPath=path.join('template ',' aaa ',' bbb ',' ccc ',' d . js ');
//输出:模板/aaa/bbb/ccc/d.js看到一个很常见的场景。我们需要得到当前项目的package.json文件,这样我们就可以得到它的路径:
const pkgPath=path . join(process . CWD(),'。/package . JSON’);
//Output :/users/连笑/code/node-API-test/package . jsonpath . 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.mdpath.resolve(...paths)path.resovle 和 path.join 的区别在于它的作用是将传入的多个路径和当前执行路径拼接成一个完整的绝对路径。
假设我现在 index.js 在 scripts 目录下,然后我在根目录下执行 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.js console.log(path.basename('scripts/index.js', '.js')); // 匹配到 .js,返回 index console.log(path.basename('scripts/index.js', '.json')); // 没匹配到,返回 index.jspath.dirname(path)和 path.basename 对应,返回指定 path 最后一个路径名之前的路径。比如:
console.log(path.basename('scripts/index.js')); // scripts console.log(path.basename('scripts/hook/index.js')); // scripts/hookpath.extname(path)和 path.basename 对应,返回指定 path 最后一个路径名的文件扩展名(含小数点 .)。比如:
console.log(path.basename('scripts/index.js')); // .js console.log(path.basename('README.md')); // .md对比最后再来对比一下各个路径相关的 API 的区别。
项目 A 的目录结构如下:
├── scripts │ └── index.js ├── src │ └── index.js ├── package.json ├── README.mdscripts/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.js package.json /Users/xiaolian/Code/A/package.json src/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 默认都是异步回调的形式,如果你想使用同步的方法,有两种解决方法:
使用 Node 提供的同步 API:xxxSync,也就是在 API 的后面加一个 Sync 后缀,它就是一个同步方法了(具体还是需要查文档哈,是否有提供同步 API)包装成一个 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 目录下的文件和目录,返回值为一个包含 file 和 directory 的数组。
假设当前目录为:
. ├── 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 的文件内容。
入参如下:
第一个参数: 文件路径第二个参数: 配置对象,包括 encoding 和 flag,也可以直接传如 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)对应着读文件 readFile,fs 也提供了写文件的 API writeFile,接收四个参数:
第一个参数: 待写入的文件路径第二个参数: 待写入的文件内容第三个参数: 配置对象,包括 encoding 和 flag,也可以直接传如 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 时常用的一些 API,后续的文章会带来 Node 常用的一些三方包。
更多编程相关知识,请访问:编程视频!!
以上就是详解Node.js中Process、Path和File System模块常用 API的详细内容,更多请关注php中文网其它相关文章!
来源:php中文网