使用Node.js复制和转换文件

使用Node.js复制和转换文件,node.js,file-io,template-engine,Node.js,File Io,Template Engine,我想使用Node.js复制一些文件。基本上,这很容易,但我需要满足两个特殊要求: 我需要解析文件的内容,并用实际值替换一些占位符 文件名也可能包含占位符,我需要用实际值替换它 所以,虽然这基本上不是一项复杂的任务,但我想有多种方法可以解决这个问题。例如,如果我可以使用模板引擎来进行替换,那就太好了,但另一方面,我需要将完整的文件作为字符串。我更喜欢基于流的方法,但是——我应该如何做呢 你看,有很多问题,我无法决定走哪条路 有任何提示、想法、最佳实践等吗 或者-是否有模块执行此任务?您可以编写自己

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

  • 我需要解析文件的内容,并用实际值替换一些占位符
  • 文件名也可能包含占位符,我需要用实际值替换它
  • 所以,虽然这基本上不是一项复杂的任务,但我想有多种方法可以解决这个问题。例如,如果我可以使用模板引擎来进行替换,那就太好了,但另一方面,我需要将完整的文件作为字符串。我更喜欢基于流的方法,但是——我应该如何做呢

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

    有任何提示、想法、最佳实践等吗


    或者-是否有模块执行此任务?

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

    最简单的解决方案是创建一个可读的流,附加一个
    数据
    事件侦听器,并逐个字符迭代缓冲区读取。如果您有这样一个占位符:
    ${label}
    ,然后检查是否找到
    ${
    ,然后将标志设置为true。开始存储标签名称。如果找到
    }
    且标志为true,则完成此操作。将flag设置为false,将临时标签字符串设置为
    “”


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

    非常简单的方法:读取整个文件并使用regexes@mihai即使文件是30GB大?他没有提供任何关于文件性质的细节:)不,文件不是30GB大。无论如何,我认为可能有一种比把所有东西都载入内存更优雅的方法。这就是我想到streams的原因。@mihai这就是为什么可以安全地假设文件可能很大。无论如何,我也想知道是否有任何基于流的解决方案来解决这个问题……但是您确实需要处理跨块的“占位符”。即,
    $
    可能出现在块n中,而
    {
    字符可能出现在块n+1中。