Пользовательский плагин Babel - не может пройти (посещение) JSXElement - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь написать собственный плагин для преобразования Babel. Когда я вижу AST для компонента React в astxplorer.net , я вижу JSXElement в дереве как узел.

Но когда я пытаюсь зарегистрировать путь для посетителя JSXElement, ничего не регистрируется в консоли.

Реагирует на компонент

const HelloWorld = () => <span>Hello World</span>

Код для преобразования компонента и регистрируется JSXElement при посещении

transform.test.js

const { code, ast } = transformSync(HelloWorld, {
    ast: true,
    plugins: [
      function myOwnPlugin() {
        return {
          visitor: {
            JSXElement(path) {
              // nothing logs to the console
              console.log("Visiting: " + path);
            }
          }
        };
      },
    ]
  });

Если это поможет, у меня есть transform.test.js внутри проекта create-react-app. CRA поставляется со встроенной предустановкой react-app.

"babel": {
    "presets": [
      "react-app"
    ]
  }

. Я запускаю тест с помощью команды jest transform.test.js, и у меня есть преобразование babel-jest, применяемое по умолчанию в настройке CRA jest.

1 Ответ

1 голос
/ 02 ноября 2019

Я думаю, что вы передаете компонент в Babel вместо кода для компонента, вам нужно преобразовать фактический код в строку, например, что-то вроде этого:

const { code, ast } = transformSync(`const HelloWorld = () => <span>Hello World</span>`, {
    ast: true,
    plugins: [
      function myOwnPlugin() {
        return {
          visitor: {
            JSXElement(path) {
              // nothing logs to the console
              console.log("Visiting: " + path);
            }
          }
        };
      },
    ]
  });```
...