Codemod — это инструмент для автоматической модификации кода, используемый для облегчения процесса миграции между версиями библиотек. В контексте Ant Design он особенно полезен при переходе с одной крупной версии на другую, когда ручное исправление сотен компонентов становится непрактичным.
Codemod использует AST (Abstract Syntax Tree) для анализа исходного кода. AST представляет код в виде дерева, где каждая ветвь соответствует синтаксической конструкции JavaScript. Это позволяет инструменту:
Использование AST обеспечивает точность изменений и минимизирует риск ошибок по сравнению с простым поиском и заменой строк.
Для работы с Codemod в проекте на Ant Design достаточно установить официальные пакеты:
npm install @ant-design/codemod -D
Структура каталогов codemod обычно выглядит следующим образом:
codemod/
├─ v4-to-v5/
│ ├─ button.js
│ ├─ form.js
│ └─ table.js
└─ utils/
└─ helper.js
Каждый скрипт отвечает за миграцию конкретного компонента или группы компонентов.
Codemod автоматически преобразует устаревшие компоненты в новые версии. Например, изменение структуры кнопок:
// До
<Button type="primary" htmlType="submit">Отправить</Button>
// После применения codemod
<Button type="primary" htmlType="submit">Отправить</Button>
В этом примере может быть заменен устаревший API или атрибуты, которые изменились в новой версии.
Некоторые свойства компонентов изменяются между версиями. Codemod позволяет автоматически их переименовать, исключая необходимость ручного поиска по всему проекту.
// До
<FormItem label="Имя" required />
// После
<Form.Item label="Имя" required />
Codemod может удалять или заменять устаревшие методы и свойства. Это особенно важно для компонентов, чьи методы больше не поддерживаются в новой версии Ant Design.
Codemod обычно запускается через CLI с указанием каталога исходного кода и конкретного скрипта миграции:
npx @ant-design/codemod v4-to-v5 ./src
Пояснение параметров:
v4-to-v5 — набор скриптов для миграции с версии 4 на
5;./src — директория с исходным кодом приложения.Дополнительно можно использовать флаг --dry для
тестового прогонки, чтобы увидеть изменения без их применения.
Иногда стандартных codemod-скриптов недостаточно для крупных проектов. В таком случае можно создавать свои скрипты на основе jscodeshift:
npm install jscodeshift -D
Пример простого кастомного скрипта для переименования компонента
OldButton в Button:
export default function transformer(file, api) {
const j = api.jscodeshift;
const root = j(file.source);
root.find(j.ImportDeclaration, { source: { value: 'antd' } })
.find(j.ImportSpecifier)
.forEach(path => {
if (path.node.imported.name === 'OldButton') {
path.node.imported.name = 'Button';
}
});
return root.toSource();
}
Такой подход позволяет обрабатывать любые пользовательские кейсы миграции, которые не покрыты стандартными пакетами Ant Design.
Для крупных проектов полезно интегрировать codemod в pipeline CI/CD, чтобы автоматизировать миграцию при обновлении зависимости Ant Design. Это позволяет:
Пример команды в CI:
npx @ant-design/codemod v4-to-v5 ./src --dry
npm test
Такой подход позволяет сначала выполнить тестовый прогон, затем применить изменения только после успешного прохождения тестов.
Codemod для Ant Design выпускается синхронно с релизами библиотеки. Основные сценарии:
Использование codemod ускоряет процесс миграции и снижает риск ошибок при переходе между крупными версиями.