Pesquisa de site

typescript - Por que executar a verificação do prettier retorna o erro "Não foi possível resolver o parser "babel-ts"" ao usar o parser babel-ts?


Quando eu executo o comando de verificação: `prettier --check '**/*.ts'` com uma configuração do prettier mostrada abaixo, recebo um erro indicando que o parser babel-ts não foi resolvido. Atualmente estou usando o prettier 2.3, que suporta esse parser, então estou um pouco confuso sobre o que eu poderia estar fazendo de errado.

printWidth: 100
singleQuote: true
trailingComma: all
tabWidth: 2
useTabs: false
overrides:
  - files: "*.ts"
    options:
      parser: babel-ts

Tentei usar vários formatos de configuração (js, json, etc) e usar a configuração do parser na raiz, mas nenhum deles parecia afetar o comportamento estranho.

Minha configuração de pacote:

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "tsc -p ."
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@types/node": "^15.0.3"
  },
  "devDependencies": {
    "prettier": "^2.3.0",
    "typescript": "^4.2.4"
  }
}

arquivo de teste index.ts

let a:number = 6

Erro Completo:

prettier --check '*.ts' 
Checking formatting...
index.ts[error] Error: Couldn't resolve parser "babel-ts"

Observação: o Prettier está instalado apenas localmente e não globalmente

Resposta #1

Encontrei. Requerido do mesmo pacote npm e adicionado como um plugin 🎉

const prettier = require("prettier");
const tsParser = require("prettier/parser-typescript");

prettier.format(code, {
    parser, // https://prettier.io/docs/en/options.html#parser
    plugins: [tsParser],
});

Resposta #2

Bem, isso é frustrante. Então, para reiterar, a instalação foi local e não global, mas, ao rodar a partir do diretório do projeto, retornava um erro SOMENTE ao usar o parser babel-ts. Se eu escolhesse outro parser, funcionava bem. Isso poderia ser devido a alguma lógica estranha de caminhos dentro da biblioteca? Não sei.

NO ENTANTO, se eu executar este comando com o prefixo yarn, ou seja:

yarn prettier --check '*.ts'

FUNCIONA. Ainda acho bastante estranho que só não funcione com o parser babel-ts.

ATUALIZAÇÃO: Mesmo que não estivesse presente nos meus globais do npm/yarn, ele ainda estava presente no meu sistema Linux. Estou supondo que em algum momento usei um pacote do AUR que não foi atualizado para o prettier > 2.0. Não se esqueça de ficar atento a esses!

Artigos relacionados