使用 vue-cli 遇到“无法推断解析器”错误

Posted

技术标签:

【中文标题】使用 vue-cli 遇到“无法推断解析器”错误【英文标题】:Running into "couldn't infer parser" error using vue-cli 【发布时间】:2018-11-06 10:21:57 【问题描述】:

我在尝试使用 vue-cli 构建新的 webpack 项目时反复收到错误消息。我正在关注最新版本 (3.0.0-beta.11) 上的文档,还尝试使用不是 beta 的早期版本。

当我运行 yarn serve 时,它会尝试启动开发服务器并构建项目,但在这里失败:

error  in ./src/App.vue?vue&type=template&id=7ba5bd90

Module build failed: Error: No parser and no file path given, couldn't infer a parser.
    at normalize (/Users/cory/Code/chickadee/my-project/node_modules/prettier/index.js:7051:13)
    at formatWithCursor (/Users/cory/Code/chickadee/my-project/node_modules/prettier/index.js:10370:12)
    at /Users/cory/Code/chickadee/my-project/node_modules/prettier/index.js:31115:15
    at Object.format (/Users/cory/Code/chickadee/my-project/node_modules/prettier/index.js:31134:12)
    at actuallyCompile (/Users/cory/Code/chickadee/my-project/node_modules/@vue/component-compiler-utils/dist/compileTemplate.js:93:29)
    at compileTemplate (/Users/cory/Code/chickadee/my-project/node_modules/@vue/component-compiler-utils/dist/compileTemplate.js:26:16)
    at Object.module.exports (/Users/cory/Code/chickadee/my-project/node_modules/vue-loader/lib/loaders/templateLoader.js:42:20)

 @ ./src/App.vue?vue&type=template&id=7ba5bd90 1:0-194 1:0-194
 @ ./src/App.vue
 @ ./src/main.js
 @ multi (webpack)-dev-server/client/index.js (webpack)/hot/dev-server.js ./src/main.js

关于我的设置

Mac 操作系统 我正在运行 node v8.5.0 安装包时使用yarn

我尝试过的事情

不同版本的vue-cli 生成一个新项目。项目生成并安装模块。 尝试删除 prettier 模块,但错误似乎仍然出现。 尝试重新安装所有模块。

我还可以尝试什么来克服这个错误?

【问题讨论】:

确认照你的做,也没有运气!!!等待这个 PR:github.com/vuejs/component-compiler-utils/pull/… 【参考方案1】:

现在,我尝试了所有选项..下载和升级更漂亮...但没有一个成功。直到我仔细研究了发生的事情。 显然,更漂亮的团队删除了默认解析器 babylon 并这样做......破坏了互联网。

开个玩笑。

Issue repo

根据他们的说法,最简单的解决方案是简单地添加解析器。 这已被 Vue 团队采纳,预计将与最新的修复版本一起发布。 如果您使用的是 Vue Loader/Yarn,甚至不必费心去尝试所有的建议……我都试过了。 为我解决的问题是……去 node_modules\vue-loader\lib\template-compiler ...打开 index.js 并寻找

// prettify render fn if (!isProduction) code = prettier.format(code, semi: false)

并将这些行更改为:

// prettify render fn
if (!isProduction) 
  code = prettier.format(code,  semi: false, parser: 'babylon' )

就是这样! 然后,一旦问题得到解决,一切都会被回滚,你仍然会没事的。

试试这个...它将为您节省无数分钟的搜索时间....

【讨论】:

【参考方案2】:

正如各种反应已经指出的那样,您可能需要回滚更漂亮的软件包的版本。

在您的 package.json 文件中,您可能需要强制 npm 使用一个版本(即移除帽子 ^)

我的看起来像这样

"devDependencies": 

"prettier": "1.12.1",
"typescript": "^2.6.1",
"vue": "^2.5.16",
"vue-styleguidist": "^1.4.4",
"vue-webpack-loaders": "^1.0.6",
"webpack": "^3.1.0"

【讨论】:

【参考方案3】:

从项目中删除当前的node_modules 文件夹,将"prettier": "^1.12.1" 添加到package.json 并运行npm install 解决了这个问题。

另一种选择是运行 npm install prettier@1.12.1 而不删除之前的 node_modules 文件夹

更新:

对于某些用户,版本 1.12.1 不起作用

@Kivin 提出了另一个解决方案,可以在这里找到:vue webpack template missing parser

【讨论】:

我不知道为什么,但我尝试使用yarn 降级到1.2.1,但它似乎不起作用。起作用的是npm install --save-dev prettier@1.12.1。但看起来你在这里做的是同样的事情,只是简单地替换了所有的模块。【参考方案4】:

运行npm install prettier@1.12.1 为我解决了这个问题。谢谢lsxliron。

【讨论】:

每次安装当前 vue-cli 版本后,您都需要这样做,然后在 vue-cli 更新后将其从依赖项中删除。【参考方案5】:

已知问题,在下一版本的 vue-cli 中将是 fixed

在更漂亮的 1.13.0 中,默认解析器被删除了一个次要版本(曾经是巴比伦)

问题:https://github.com/vuejs/component-compiler-utils/issues/14

prettier repo 上的问题:https://github.com/prettier/prettier/issues/4567

抱歉,我们犯下了古老的 semver 罪过 - 我们知道这是一个重大更改,但因为它只会影响我们的一部分用户,所以我们没有修改主要版本,因为我们不想为我们的用户升级制造摩擦。

要获得旧行为,请添加 parser: "babylon"您可能还希望将 prettier 锁定到 package.json 中的特定版本

【讨论】:

以上是关于使用 vue-cli 遇到“无法推断解析器”错误的主要内容,如果未能解决你的问题,请参考以下文章

vue-cli3取消eslint

vue-cli3+typescript+路由懒加载报错问题

vue-cli3 打包时使用‘babel-loader’遇到Cannot assign to read only property ‘exports’ of object '#'问题

罗永浩:未担任任何城市形象大使 部分媒体标题或话题错写 造成公众误解

菜鸟用vue-cli的心得

vue2.X版本vue-cli生成项目后运行失败,报错信息为getaddrinfo ENOTFOUND localhost