Babel: replaceWithSourceString с неожиданным токеном (1: 1) - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь динамически заменить операторы "import".

Вот пример, который проверяет, заканчивается ли импорт плюсом.

module.exports = function(babel) {

    return {
        visitor: {
            ImportDeclaration: function(path, state) {
             // import abc from "./logic/+"
             if( ! path.node.source.value.endsWith("/+"))
              return;

             path.replaceWithSourceString('import all from "./logic/all"')

            }
        }
    }
}

Это дает ошибку

SyntaxError: src/boom.js: Unexpected token (1:1) - make sure this is an expression.
> 1 | (import all from "./logic/all")

Проблема в том, что replaceWithSourceString оборачивает строку в округлые фигурные скобки.

Если я заменю replaceWithSourceString на

path.replaceWithSourceString('console.log("Hi")')

, и это работает.. ¯_ (ツ) _ / ¯

Все и вся помогут вам быть великими

1 Ответ

0 голосов
/ 19 февраля 2019

replaceWithSourceString действительно следует избегать, потому что, как вы видите, это не очень хороший API.Рекомендуемый подход для создания AST для вставки в скрипт - использовать template.Предполагая, что это для Babel 7.x, вы можете сделать

const importNode = babel.template.statement.ast`import all from "./logic/all"`;
path.replaceWith(importNode);
...