Так что я пробовал везде, но не могу найти ответы на это. Я пытаюсь добавить некоторые пользовательские функции в процесс сборки Gatsby, который выполняется на node.js, что требует от меня получения содержимого файла и анализа в ast. Я успешно использую @babel/parser
, однако всякий раз, когда синтаксический анализатор сталкивается с синтаксическими ошибками, он выдает ошибку, ссылающуюся на файл, запускающий синтаксический анализатор, а не на анализируемый файл (т. Е. Где фактически находится синтаксическая ошибка).
Здесь пример из gatsby-node.js
, где я пытаюсь запустить функцию синтаксического анализа:
const contents = fs.readFileSync( file, 'utf-8' );
const ast = parser.parse( contents, {
errorRecovery: true,
plugins: [ 'jsx' ],
sourceFilename: 'SHOWME.js',
sourceType: 'module',
} );
Вот фактическая синтаксическая ошибка в анализируемом файле с именем Page.js
:
import React from 'react';
import { useGroqQuery } = 'this should break';
А вот ошибка, отображаемая в терминале:
"gatsby-node.js" threw an error while running the createPages lifecycle:
Unexpected token (2:24)
119 |
120 | const contents = fs.readFileSync( file, 'utf-8' );
> 121 | const ast = parser.parse( contents, {
| ^
122 | errorRecovery: true,
123 | plugins: [ 'jsx' ],
124 | sourceFilename: 'SHOWME.js',
File: gatsby-node.js:121:20
SyntaxError: Unexpected token (2:24)
- index.js:742 Object._raise
[gatsby-groq]/[@babel]/parser/lib/index.js:742:17
- index.js:735 Object.raiseWithData
[gatsby-groq]/[@babel]/parser/lib/index.js:735:17
- index.js:729 Object.raise
[gatsby-groq]/[@babel]/parser/lib/index.js:729:17
Как видите, она не отображает ни саму ошибку синтаксиса, ни имя файла, только номера строк и столбцов. Довольно расстраивает отладку. Я попытался использовать параметры синтаксического анализатора errorRecovery
и sourceFilename
, но здесь они ничего не изменили.
Кто-нибудь сталкивался с чем-либо подобным?