node全面入门教程
本文涉及内容是关于自动化工具开发使用到部分开发知识。
fs
模块提供了在Node.js中轻松读取文件的API。这里是逐步读取文件指南:
创建一个名为app.js
的新文件。
使用require
函数导入fs
模块:
const fs = require('fs');
使用fs.readFile
函数读取文件内容:
fs.readFile('./example.txt', 'utf8', (err, data) => {
if (err) {
console.error('读取文件错误:', err);
return;
}
console.log('文件内容:', data);
});
使用fs模块写入文件
fs
模块也提供了简单的API来写入文件。按照以下步骤写入文件:
在app.js
中导入fs
模块(如果你还没有的话):
const fs = require('fs');
使用fs.writeFile
函数向文件写入数据:
const data = 'Hello, World!';
fs.writeFile('./output.txt', data, 'utf8', (err) => {
if (err) {
console.error('写入文件错误:', err);
return;
}
console.log('文件写入成功!');
});
通过掌握Node.js中的文件系统(fs)模块,您可以轻松读写文件,使应用程序更具通用性和功能强大。
圈选元素时,需要重新打开新的浏览器,这个时候子进程必不可少的。
好的,我来把这篇关于Node.js子进程的西班牙文文章翻译成中文:
关于Node.js进程管理的基本文章。简要概述了Child process模块和后台操作。
如今许多编程语言在其核心中包含了多种机制来生成和交互新进程。Node.js特别包含了一个名为child_process的模块,可以帮助我们完成这项工作。
一些我们可以用Node.js实例化的进程示例:
以下是Node.js中的一个程序示例,它在操作系统中启动Google Chrome的新进程。该程序打开一个标签页并访问哔哩哔哩的地址:
const { exec } = require('child_process');
const os = require('os');
const platform = os.platform();
const url = "https://www.bilibili.com/";
let cmdCommand;
if (platform === "win32") {
cmdCommand = `start chrome /new-tab ${url}`;
} else {
cmdCommand = `open -na 'Google Chrome' --args --new-window ${url}`;
}
exec(cmdCommand);
结果如下:
在这里插入图片描述
child process模块为我们提供了生成新进程而不是线程的能力。该模块旨在用于长时间运行的任务和与操作系统的交互。值得注意的是,当使用此模块创建子进程时,会启动一个独立的进程,独立于Node.js的主进程,尽管它们之间是连接和通信的。
child_process模块包含了以下主要方法,这些方法将帮助我们创建、操作和执行进程:exec、spawn和fork。
这些Node.js方法的一些要点:
error
、close
和 message
。stdin
、stdout
和 stderr
。注意:“child_process”本身并不打算用于线程的创建,而是用于生成新进程。
exec方法生成一个新的shell进程,并在该shell中执行命令。
在下一个示例中,我们将实例化一个shell进程,并执行ping命令以ping google.com。
const { exec } = require('child_process');
exec('ping -c 10 google.com', (error, stdout, stderr) => {
if (error) {
console.error(`error: ${error.message}`);
return;
}
if (stderr) {
console.error(`stderr: ${stderr}`);
return;
}
console.log(`stdout:\n${stdout}`);
});
结果如下:
Pinging google.com [142.251.0.101] with 32 bytes of data:
Reply from 142.251.0.101: bytes=32 time=7ms TTL=107
Reply from 142.251.0.101: bytes=32 time=11ms TTL=107
Reply from 142.251.0.101: bytes=32 time=11ms TTL=107
Reply from 142.251.0.101: bytes=32 time=8ms TTL=107
Ping statistics for 142.251.0.101:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 7ms, Maximum = 11ms, Average = 9ms
注意:命令的结果保存在内存中的缓冲区中,并通过回调函数工作。
spawn方法通过流处理生成一个新的进程来执行命令。该方法旨在处理高强度的工作负载。
在下一个示例中,我们将执行 find 命令来搜索当前目录中的文件,并同时监听 stdout、stderr、error 和 close 事件。
const { spawn } = require('child_process');
const subProcess = spawn("find", ["."]);
subProcess.stdout.on('data', (data) => {
console.log(`stdout:\n${data}`);
});
subProcess.stderr.on('data', (data) => {
console.error(`stderr: ${data}`);
});
subProcess.on('error', (error) => {
console.error(`error: ${error.message}`);
});
subProcess.on('close', (code) => {
console.log(`child process exit ${code}`);
});
结果如下(当时我的文件):
stdout:
.
./array_2D.js
child process exit 0
注意:与通过回调函数工作的 exec
不同,spawn
使用流工作。这使我们可以运行更长时间的进程,并且方式更加异步。有关这些方法的更多信息,请查看文档。
fork方法生成一个新的具有父子进程之间通信功能的进程(某种意义上的父进程和子进程)。该方法旨在处理分支和汇聚。
在下一个示例中,我们将实例化一个子进程,该子进程将在5秒内(异步模拟)向父进程发送信息。
子进程(child.js)
setTimeout(() => {
process.send("Hello father, I send this information")
}, 5000);
父进程(father.js)
const { fork } = require('child_process');
const subProcess = fork("./child.js");
subProcess.on('message', (message) => {
console.log(`I get this from the son: ${message}`);
});
结果如下:
I get this from the son: Hello father, I send this information
通过 fork
创建的主进程和子进程之间的消息可以通过Node的全局对象 process 访问。 此外,通过 fork
我们可以控制子进程何时启动活动,或者从子进程向主进程返回数据,反之亦然。