将文件中的字符串替换为 nodejs

2022-08-30 00:52:27

我使用 md5 grunt 任务来生成 MD5 文件名。现在我想用任务回调中的新文件名重命名HTML文件中的源代码。我想知道最简单的方法是什么。


答案 1

您可以使用简单的正则表达式:

var result = fileAsString.replace(/string to be replaced/g, 'replacement');

所以。。。

var fs = require('fs')
fs.readFile(someFile, 'utf8', function (err,data) {
  if (err) {
    return console.log(err);
  }
  var result = data.replace(/string to be replaced/g, 'replacement');

  fs.writeFile(someFile, result, 'utf8', function (err) {
     if (err) return console.log(err);
  });
});

答案 2

由于替换对我不起作用,因此我创建了一个简单的 npm 包替换文件,以快速替换一个或多个文件中的文本。这部分基于@asgoth的答案。

编辑(2016 年 10 月 3 日):该软件包现在支持承诺和 globs,并且已更新使用说明以反映这一点。

编辑(2018年3月16日):该软件包现在每月下载量已超过10万次,并已扩展了其他功能以及CLI工具。

安装:

npm install replace-in-file

需要模块

const replace = require('replace-in-file');

指定替换选项

const options = {

  //Single file
  files: 'path/to/file',

  //Multiple files
  files: [
    'path/to/file',
    'path/to/other/file',
  ],

  //Glob(s) 
  files: [
    'path/to/files/*.html',
    'another/**/*.path',
  ],

  //Replacement to make (string or regex) 
  from: /Find me/g,
  to: 'Replacement',
};

带有承诺的异步替换:

replace(options)
  .then(changedFiles => {
    console.log('Modified files:', changedFiles.join(', '));
  })
  .catch(error => {
    console.error('Error occurred:', error);
  });

使用回调的异步替换:

replace(options, (error, changedFiles) => {
  if (error) {
    return console.error('Error occurred:', error);
  }
  console.log('Modified files:', changedFiles.join(', '));
});

同步替换:

try {
  let changedFiles = replace.sync(options);
  console.log('Modified files:', changedFiles.join(', '));
}
catch (error) {
  console.error('Error occurred:', error);
}