Babel无法正常解析的流程

问题描述 投票:0回答:1

我似乎无法使用Babel解析Flow,它无法识别类型或“声明”,并且在它们上提出了错误:-

const fs = require("fs");
const babel = require("@babel/core");
const parser  = require('@babel/parser');
const generate = require('@babel/generator').default;

if (process.argv.length == 3) {

    const filename = process.argv[2];

    const sourceCode = fs.readFileSync(filename).toString();

    console.log("sourceCode = ", sourceCode);

    var options = {
        "sourceType": "module", // parse in strict mode and allow module declarations
        "presets": ["@babel/preset-flow"]
    };

    const parsedAst = parser.parse(sourceCode, options);


    console.log("parsedAst = ", parsedAst)

    const { codeOutput, map, ast } = babel.transformFromAstSync(parsedAst, sourceCode, { ast: true } );

    console.log("ast = ", JSON.stringify(ast, 2, 2))


    const output = generate(ast, { /* options */ }, sourceCode);

    console.log("codeOutput = ", codeOutput);
    console.log("output = ", output);
};

给出以下代码:-

// @flow strict

const MAX_SUGGESTIONS = 5;

/**
 * Given [ A, B, C ] return ' Did you mean A, B, or C?'.
 */
declare function didYouMean(suggestions: $ReadOnlyArray<string>): string;
// eslint-disable-next-line no-redeclare
declare function didYouMean(
  subMessage: string,
  suggestions: $ReadOnlyArray<string>,
): string;

// eslint-disable-next-line no-redeclare
export default function didYouMean(firstArg, secondArg?) { ... }

在声明类型时也出现错误:-

C:\Users\aaron\Tests\Babel\generator-test\node_modules\@babel\parser\lib\index.js:730
      throw err;
      ^

SyntaxError: Unexpected token, expected ";" (8:8)
    at Parser._raise (C:\Users\aaron\Tests\Babel\generator-test\node_modules\@babel\parser\lib\index.js:723:17)
    at Parser.raiseWithData (C:\Users\aaron\Tests\Babel\generator-test\node_modules\@babel\parser\lib\index.js:716:17)
    at Parser.raise (C:\Users\aaron\Tests\Babel\generator-test\node_modules\@babel\parser\lib\index.js:710:17)
    at Parser.unexpected (C:\Users\aaron\Tests\Babel\generator-test\node_modules\@babel\parser\lib\index.js:8610:16)
    at Parser.semicolon (C:\Users\aaron\Tests\Babel\generator-test\node_modules\@babel\parser\lib\index.js:8592:40)
    at Parser.parseExpressionStatement (C:\Users\aaron\Tests\Babel\generator-test\node_modules\@babel\parser\lib\index.js:11449:10)
    at Parser.parseStatementContent (C:\Users\aaron\Tests\Babel\generator-test\node_modules\@babel\parser\lib\index.js:11050:19)
    at Parser.parseStatement (C:\Users\aaron\Tests\Babel\generator-test\node_modules\@babel\parser\lib\index.js:10916:17)
    at Parser.parseBlockOrModuleBlockBody (C:\Users\aaron\Tests\Babel\generator-test\node_modules\@babel\parser\lib\index.js:11490:25)
    at Parser.parseBlockBody (C:\Users\aaron\Tests\Babel\generator-test\node_modules\@babel\parser\lib\index.js:11477:10) {
  loc: Position { line: 8, column: 8 },
  pos: 118
}

Github:-

https://github.com/AaronNGray/babel-flow-parser-test

标签v0没有package-lock.json

需要添加一些我无法想到的额外细节?

parsing babel flow
1个回答
0
投票

以下作品:-

const fs = require('fs');
const babel = require('@babel/core');

if (process.argv.length == 3) {
    const filename = process.argv[2];

    const source = fs.readFileSync(filename).toString();

    const ast = babel.parseSync(source, {
        babelrc: false,
        configFile: false,
        ast: true,
        parserOpts: {
            plugins: ['flow', 'jsx'],
        },
        filename,
    });

    console.log("ast = ", JSON.stringify(ast, null, 2))
}
© www.soinside.com 2019 - 2024. All rights reserved.