Node.js 写入 YAML 文件

8
我正在使用Node.js,但不知道如何读取YAML文件、替换其中的值并将更新后的值写回YAML文件。我目前使用的是"yamljs"模块,它可以加载YAML文件,我已经成功修改了加载对象中的值。唯一需要帮助的部分是如何写入YAML文件,因为我无法在任何地方找到解决方案,也不确定是否可以使用该模块进行操作。该模块确实有一些命令行工具,但我也不太确定如何使用它们。

2
根据 yamljs 的文档,这是不可能的。你可以看看其他库。js-yaml 看起来可以做到两者(但该仓库似乎没有维护,但在 NPM 上有很多下载量)。 - Léopold Houdin
1
  1. 它是 YAML,而不是 YML,这些文件的文件扩展名应该是 .yaml,除非您的文件系统不支持它。
  2. 大多数 YAML 解析器/加载器会丢弃有意义的信息,例如注释、ID,在进行往返操作(加载-修改-保存)时,我所知道的唯一例外是基于 Python 的 ruamel.yaml
- Anthon
我会尝试使用js-yaml,谢谢 :3 - TenDRILLL
@TenDRILLL,你能用js-yaml写入yaml文件吗? - Nitish Bhardwaj
是的,我是,只是不知道怎么关闭它。 - TenDRILLL
没事,我自己回答了 :D 将其标记为正确答案并关闭。 - TenDRILLL
1个回答

12

对于我的情况,模块"js-yaml"很有效。 https://github.com/nodeca/js-yaml

这是我使用的代码:

const yaml = require('js-yaml');
...

let doc = yaml.safeLoad(fs.readFileSync('./Settings.yml', 'utf8'));
doc.General.Greeting = newGreet;
fs.writeFile('./Settings.yml', yaml.safeDump(doc), (err) => {
    if (err) {
        console.log(err);
    }
});

你在Settings.yml中有什么东西? 还有,在newGreet中有什么? - Salvatore Di Fazio
你为什么问呢?newGreet是由函数定义的本地变量,而我的Settings.yml结构就像我在示例中展示的那样。显然你不能复制粘贴它,但它展示了如何使用它的基本思路。 - TenDRILLL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接