pubspec.yaml文件中依赖项行首‘+’符号的含义及相关报错解析
关于pubspec.yaml行首+符号的疑问解答
嘿,这个问题我刚看到的时候也愣了一下,其实核心原因和那个+符号关系不大,咱们一步步说清楚:
为什么去掉+会报错?
你遇到的解析错误本质是YAML缩进问题!YAML对缩进的要求特别严格,dependencies下面的每一个包都必须是它的子项,也就是说行首必须和上面的cupertino_icons保持相同的缩进(一般是2个空格)。
你去掉+之后,应该是不小心把这行的缩进也删了,导致english_words: ^4.0.0变成了和dependencies同级的顶级配置项。YAML解析器在处理dependencies的块映射时,本来预期下一个是子项的key,结果看到了一个顶级key,所以才抛出了Expected a key while parsing a block mapping的错误。
行首的+到底是什么?
这个+根本不是pubspec或YAML的官方语法!它是教程里用来标记「新增代码行」的diff格式符号(就像git diff里用+表示新增内容、-表示删除内容),目的是让你一眼看到需要添加哪一行代码。
你保留+的时候能正常运行,大概率是因为你同时保持了正确的缩进——不过这里有个小细节:如果你的pubspec里真的写了 + english_words: ^4.0.0,pub应该找不到名为+ english_words的包才对,所以更可能是你在保留+的时候,下意识地保持了缩进,而去掉+之后不小心把缩进搞丢了。
正确的写法
你只需要去掉+,同时保证english_words这行的缩进和其他依赖项一致就行,正确的依赖块应该是这样:
dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.3 english_words: ^4.0.0
内容的提问来源于stack exchange,提问作者Philipp
相关产品推荐
相关产品推荐

