3

我想使用 Node.js 复制一些文件。基本上,这很容易,但我需要满足两个特殊要求:

  1. 我需要解析文件的内容并用实际值替换一些占位符。
  2. 文件名也可能包含占位符,我也需要将其替换为实际值。

所以,虽然这基本上不是一项复杂的任务,但我想有多种方法可以解决这个问题。例如,如果我可以使用模板引擎进行替换,那就太好了,但另一方面,我需要将完整的文件作为字符串。我更喜欢基于流的方法,但是 - 我应该如何进行替换?

你看,很多问题,我无法决定走哪条路。

任何提示、想法、最佳实践……?

或者 - 是否有一个模块可以完成这项任务?

4

2 回答 2

1

您可以编写自己的解决方案而无需阅读整个文件。fs.readFile()仅当您 100% 确定文件不超过缓冲区块(通常为 8KB 或 16KB)时才应使用。

最简单的解决方案是创建一个可读流,附加一个data事件监听器并逐个字符地迭代缓冲区读取。如果您有这样的占位符:${label},然后检查是否找到${,然后将标志设置为 true。开始存储标签名称。如果你找到}并且标记为真,那么你已经完成了。将 flag 设置为 false 并将时间标签字符串设置为"".

您不需要任何模板引擎或额外的模块。

于 2013-01-27T11:46:05.280 回答
0

如果整个文件可以安全地加载到内存中(不是很大),那么库fs-jetpack可能是这个用例的非常好的工具。

const jetpack = require("fs-jetpack");

const src = jetpack.cwd("path/to/source/folder");
const dst = jetpack.cwd("path/to/destination");

src.find({ matching: "*" }).forEach((path) => {
  const content = src.read(path);
  const transformedContent = transformTheFileHoweverYouWant(content);
  const transformedPath = transformThePath(path);
  dst.write(transformedPath, transformedContent);
});

在示例代码中是同步的,但您可以轻松地使异步等效。

于 2021-11-25T10:54:19.793 回答