YAML语法问题

时间:2016-11-28 10:11:06

标签: yaml

我是YAML的新手,只知道JSON和XML格式

我有TravisCI的.yml配置,它有一些奇怪的语法错误,我无法弄清楚如何解决它。

最初我有这个,一切都很好:

language: node_js
node_js:
  - '7'
  - '6'
  - '5'
  - '4'
script: 'npm install istanbul && node cli.js --coverage test/testsrc/es5-es6/a.js'
after_script: 'npm install coveralls && cat coverage/lcov.info | ./node_modules/.bin/coveralls'
notifications:
  email: false
  slack:
    rooms:
      - sumanjs:gvauyHhXXXXXpV5v8LlQOAcI#general

但我读到我们需要在容器中提供一些C ++库,所以我必须根据这些说明在.yml文件中添加一些东西:

  

https://docs.travis-ci.com/user/languages/javascript-with-nodejs#Node.js-v4-(or-io.js-v3)-compiler-requirements

所以现在我有了这个,这是无效的,但我不明白为什么:

language: node_js
node_js:
  - '7':
   env:
      - CXX=g++-4.8
    addons:
      apt:
        sources:
          - ubuntu-toolchain-r-test
        packages:
          - g++-4.8
  - '6':
   env:
      - CXX=g++-4.8
    addons:
      apt:
        sources:
          - ubuntu-toolchain-r-test
        packages:
          - g++-4.8
  - '5':
  env:
    - CXX=g++-4.8
  addons:
    apt:
      sources:
        - ubuntu-toolchain-r-test
      packages:
        - g++-4.8
  - '4':
  env:
    - CXX=g++-4.8
  addons:
    apt:
      sources:
        - ubuntu-toolchain-r-test
      packages:
        - g++-4.8
script: 'npm install istanbul && node cli.js --coverage test/testsrc/es5-es6/a.js'
after_script: 'npm install coveralls && cat coverage/lcov.info | ./node_modules/.bin/coveralls'
notifications:
  email: false
  slack:
    rooms:
      - sumanjs:gvauyHhXXXXXcuzpV5QOAcI#general

我把它拿到YAML linter上,它说:

enter image description here

2 个答案:

答案 0 :(得分:2)

这不是那么奇怪。您有一个键'7'作为映射的第一个键值对,该映射是序列的第一个元素,即键node_js的值(即文件中该标量的第二个出现)。

键的缩进是从行的开头开始的四个位置,因此它所属的映射的所有内容应该至少具有缩进。 env:但是没有缩进四个位置,所以这是一个错误。

如果键'7'的值为(不可见)null,则再缩进env。如果值是(以及其他)具有键env)的映射,则缩进env至少两个位置。

答案 1 :(得分:0)

显然使用的格式是这样的:

language: node_js
node_js:
  - '7'
  - '6'
  - '5'
  - '4'
env:
  - CXX=g++-4.8
addons:
  apt:
    sources:
      - ubuntu-toolchain-r-test
    packages:
      - g++-4.8

script: 'npm install istanbul && node cli.js --coverage test/testsrc/es5-es6/a.js'
after_script: 'npm install coveralls && cat coverage/lcov.info | ./node_modules/.bin/coveralls'
notifications:
  email: false
  slack:
    rooms:XXXXXXXXXzpV5v8LXXcI#travis-ci

但是,如果我们想单独将env / addons密钥应用于Node.js版本,我不确定它是如何工作的。