我需要以编程方式更改一个文件,将其作为postinstallNPM脚本的一部分.

因此,我编写了一个实用程序来搜索字符串并注释掉代码行,但是结果文件是空的.

const fs = require('fs');
const path = require('path');
const readline = require('readline');
const filePath = path.join(process.cwd(), 'test.txt');
const readStream = fs.createReadStream(filePath);
const writeStream = fs.createWriteStream(filePath);

const rl = readline.createInterface({
  input: readStream,
  output: writeStream,
  terminal: false
});

rl.on('line', (line) => {
  console.log(line);

  // check if the line contains the code I want to comment out
  if (line.includes('test string')) {
    line = '// ' + line;
  }
  writeStream.write(line + '\n');
});

rl.on('close', () => {
  readStream.close();
  writeStream.close();
});

我做错了什么?虽然文件的路径是正确的,但我的控制台语句从未记录其中一个,并且ReadStream对象报告bytesRead: 0.

推荐答案

代码中的问题在于设置写入流的方式.通过使用

fs.createWriteStream(filePath) 

直接地,您实质上是用空流覆盖文件的内容.这就是您最终得到一个空白文件的原因.

在这里您可以找到更多信息 Node.js Overwriting a file

Javascript相关问答推荐

Mongodb拥有5亿个文档,我想根据JavaScript驱动程序中的两个字段使用regEx进行搜索,而不是模式

如何在JavaScript中通过一次单击即可举办多个活动

fetch在本地设置相同来源的cookie,但部署时相同的代码不会设置cookie

*ngFor和@代表输入decorator 和选角闭合

使用AJX发送表单后,$_Post看起来为空

通过使用100%间隔时间来代表我们还剩多少时间来倒计时

Google图表时间轴—更改hAxis文本 colored颜色

拖放仅通过 Select 上传

未捕获错误:在注销后重定向到/login页面时找不到匹配的路由

WebGL 2.0无符号整数输入变量

无法访问Vue 3深度监视器中对象数组的特定对象值'

如何在Vue 3中创建自定义 Select 组件,并将选项作为HTML而不是props 传递?

更改预请求脚本中重用的JSON主体变量- Postman

在数组中查找重叠对象并仅返回那些重叠对象

在开发期间,Web浏览器如何运行&qot;.jsx&qot;文件?

为什么可选参数的顺序会导致问题?

try 将Redux工具包与MUI ToggleButtonGroup组件一起使用时出错

Node.js错误: node 不可单击或不是元素

如何根据输入数量正确显示alert ?

暂停后只有一次旋转JS