2016-05-01 15 views
0

私はいくつかの種類のテキストメタデータを追加し、このメタデータを別のnode.jsアプリケーションから読み込むために必要ないくつかのnode.jsスクリプトファイルを用意しています。 私はそうのようにコメントしYAMLヘッダを使用しようとしました:yamlヘッダーのnode.jsファイル

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

しかし、「結果」は「_content」キー内のすべてのコードとYAMLを返し、:その後、

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

//actual script code.. 

とフロントの問題を使用しますyamlを適切に解析しなかった。

この要件を実装する別の方法をご存知ですか?または、問題に似た別の解決策ですか?一般的に私は、表示のためにスクリプトの名前、パラメータ、説明を取得したいと考えています。 yamlメタデータである必要はありません。テキストメタデータはすべて行いますが、別の合理的なオプションが見つかりませんでした。

ありがとうございます!

編集:私は実際にそれらを実行できるようjavascirptスクリプトファイルは有効なJavaScript構文であるべきであり、それは私がコメント

答えて

1

としてYAMLコードを書いた理由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' } 

あなたのYAMLコードの内容は、(あなたがJavaScriptファイルで、この前の問題を持っていた理由は、おそらくです)あなたが実行したいコードの一部のようなものだった、あなたはsafe-evalのようなモジュールを使用するか、ノードの可能性がある場合内蔵のvm.runInThisContext()メソッド。

+0

こんにちはスティーブ、YAMLコードは実行可能ではなく、ファイルの内容の残りの部分(//実際のスクリプトコード..行)。 yaml-fring-matterライブラリは、yamlがファイルの先頭に来ることを期待していますが、コメントがなくても有効なjavascriptの構文ではありません –

+1

そうですね、この特定のライブラリではケーキを食べることができませんに。ライブラリ自体は、私たちがブログ投稿や、実行可能なコードを持たない純粋なコンテンツのように思うかもしれないものだけを解析することができます。 'safe-eval'または' vmRunInThisContent'のどちらかを使って静的コンテンツを '__content'プロパティに入れ、それが有効なJavaScript(あなたの場合は技術的にそうである)のように実行することができます。これはおそらくあなたの最善の策です。 –

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' } 
+0

こんにちは、これは実際には動作しますが、問題はスクリプトファイルがjavascriptの有効な構文のままでなければならないため、実際に実行できるので、yamlヘッダーをコメントアウトした理由です。 –

+1

その場合、唯一の解決策は、この機能をfrontmatterリポジトリに追加するか、自分で追加してプルリクエストを作成することです。少なくとも私が知っていることは、あなたが望む方法でこれを行うことは何もありません。 – grimurd

関連する問題