带有yaml标头的node.js文件

时间:2016-05-01 16:03:17

标签: javascript node.js yaml

我有一些node.js脚本文件,我需要添加某种文本元数据并从另一个node.js应用程序读取此元数据。 我试着像这样使用评论的yaml标题:

//someScript.js
/**
---
Title: some script
Description: script which does some things.
Params:
  -param1
  -param2
---
**/

//actual script code..

然后使用前面的事情:

//app.js
var frontMatter = require('yaml-front-matter')
var results = frontMatter.loadFront('someScript.js');

但是“results”会返回“_content”键中的所有代码和yaml,并且没有正确解析yaml。

您是否知道实施此要求的另一种方法?或者也许是另一个类似问题的解决方案?一般来说,我想获取脚本的名称,参数和描述以供显示。 它不一定是yaml元数据 - 任何文本元数据都可以,但我没有找到另一个合理的选项。

提前致谢!

编辑:javascirpt脚本文件应该是有效的javascript语法,所以我可以实际执行它们,这就是为什么我将yaml代码写为注释

2 个答案:

答案 0 :(得分:1)

yaml-front-matter模块设置为读取常规.yaml文件,而不是评论中YAML前面的JavaScript文件。所以,我们说someScript.js而不是someFile.yaml,而不是someFile.yaml

在这种情况下--- Title: some script Description: script which does some things. Params: -param1 -param2 --- Your YAML content. 的内容将是:

var frontMatter = require('yaml-front-matter');
var yaml = frontMatter.loadFront('./wow.yaml');

console.log(yaml);

你现在可以这样做:

{ Title: 'some script',
  Description: 'script which does some things.',
  Params: '-param1 -param2',
  __content: '\n\nYour YAML content.\n' }

以下内容将记录到控制台。

Sub MyControl_Leave(sender As Mycontrol, e As EventArgs) 
    If Me.Enabled Then
        MsgBox(Property1)
    End If
End Sub

如果你的YAML代码的内容是你想要执行的某种代码(也许这就是你在JavaScript文件中有这个问题的原因),那么你可以使用像safe-eval或Node这样的模块。内置vm.runInThisContext()方法。

答案 1 :(得分:0)

如果我只是改变它,那么它适用于我,它看起来像是有记录的(没有包含在评论中,顶部没有文件名注释,yaml开始之前也没有新行)

---
Title: some script
Description: script which does some things.
Params:
  -param1
  -param2
---

//actual script code..

记录frontmatter.loadFront()的输出

{ Title: 'some script',
  Description: 'script which does some things.',
  Params: '-param1 -param2',
  __content: '\n\n//actual script code..\n' }