読者です 読者をやめる 読者になる 読者になる

nodeのYAMLモジュール

node.js

nodeでpitつくろうかと思ったけど、nodeのYAMLモジュールがRubyとかPerlでつくったYAMLのパースでエラって互換性とれなそうなので諦めた。

---
foo: bar

まずyamlでこれをyaml.evalするとエラる。

Error: expected indent after document, near " \nfoo: bar\n"
    at Parser.expect (/Users/hokamura/tmp/yaml/node_modules/yaml/lib/yaml.js:174:9)
    at Parser.parseDoc (/Users/hokamura/tmp/yaml/node_modules/yaml/lib/yaml.js:256:8)
    at Parser.parse (/Users/hokamura/tmp/yaml/node_modules/yaml/lib/yaml.js:226:19)
    at Object.eval (/Users/hokamura/tmp/yaml/node_modules/yaml/lib/yaml.js:375:46)
    at Object.<anonymous> (/Users/hokamura/tmp/yaml/test.js:3:16)
    at Module._compile (module.js:404:26)
    at Object..js (module.js:410:10)
    at Module.load (module.js:336:31)
    at Function._load (module.js:297:12)
    at Array.<anonymous> (module.js:423:10)

ドキュメント(---)のあとはインデントしろってことみたいだけどYAMLの仕様的にどうなのかがよくわからん。

yamlsihというのあったのでこっちも試して見た。こっちはruby版のpitなら大丈夫だけどPerl版のpitで出力されたYAMLのパースがうまくいかない。

--- 
"foo": 'bar'

こんな感じでPerl版のYAMLはクオートされていて、これをyamlishでパースすると

{ foo: '\'bar\'' }

こうなる。

pitと互換性とるの諦めてJSONとかで設定保存する別のライブラリにしようと思う。