Перед установкой библиотеки Universal Router необходимо обеспечить корректную среду разработки. Требуется установленный Node.js версии не ниже 16.x, так как библиотека использует современные возможности JavaScript и экосистемы Ethereum.
Проверка текущих версий:
node -v
npm -v
При отсутствии Node.js установка выполняется с официального сайта или
через менеджеры пакетов (например, nvm).
Также рекомендуется использовать отдельный проект с
инициализированным package.json.
npm init -y
Библиотека Universal Router распространяется через npm-репозиторий и устанавливается стандартной командой:
npm install @uniswap/universal-router
Ключевые особенности пакета:
После установки зависимость автоматически добавляется в раздел
dependencies файла package.json.
Для полноценной работы с Universal Router требуется библиотека для взаимодействия с блокчейном. Наиболее распространённые варианты:
npm install ethers
npm install web3
На практике чаще используется ethers.js благодаря удобному API и лучшей поддержке TypeScript.
После установки в директории node_modules появляется
структура:
node_modules/
@uniswap/
universal-router/
dist/
abi/
package.json
Основные элементы:
В зависимости от используемой системы модулей:
import { UniversalRouter } from '@uniswap/universal-router'
const { UniversalRouter } = require('@uniswap/universal-router')
В большинстве случаев используется не сам класс, а ABI и утилиты:
import UniversalRouterABI from '@uniswap/universal-router/abi/UniversalRouter.json'
Простейшая проверка — импорт ABI и вывод его длины:
import UniversalRouterABI from '@uniswap/universal-router/abi/UniversalRouter.json'
console.log(UniversalRouterABI.length)
Если ошибок нет — установка прошла успешно.
Universal Router поддерживает TypeScript. Для этого необходимо установить дополнительные инструменты:
npm install --save-dev typescript ts-node @types/node
Инициализация конфигурации:
npx tsc --init
Пример импорта в TypeScript:
import UniversalRouterABI from '@uniswap/universal-router/abi/UniversalRouter.json'
При необходимости можно описать типы вручную или использовать типы из
ethers.
После установки можно подключить контракт Universal Router:
import { ethers } from 'ethers'
import UniversalRouterABI from '@uniswap/universal-router/abi/UniversalRouter.json'
const provider = new ethers.JsonRpcProvider('https://mainnet.infura.io/v3/YOUR_KEY')
const routerAddress = '0x...'
const routerContract = new ethers.Contract(
routerAddress,
UniversalRouterABI,
provider
)
Важно фиксировать версию пакета для стабильности:
npm install @uniswap/universal-router@latest
Или конкретная версия:
npm install @uniswap/universal-router@1.4.0
Рекомендуется использовать файл package-lock.json или
npm shrinkwrap для предотвращения неожиданных изменений
зависимостей.
Обновление выполняется командой:
npm upd ate @uniswap/universal-router
Либо с принудительным указанием последней версии:
npm install @uniswap/universal-router@latest
При необходимости удалить библиотеку:
npm uninstall @uniswap/universal-router
1. Ошибка несовместимости Node.js
Решение: обновить Node.js до актуальной LTS-версии.
2. Конфликты зависимостей
Решение:
rm -rf node_modules package-lock.json
npm install
3. Проблемы с доступом к npm
Решение:
npm config se t registry https://registry.npmjs.org/
Оптимальная структура при работе с Universal Router:
project/
src/
contracts/
services/
utils/
node_modules/
package.json
Отдельное хранение ABI и логики взаимодействия с контрактами упрощает масштабирование проекта.
Если проект уже использует Web3-инфраструктуру:
ethers или
web3import { ethers } from 'ethers'
import UniversalRouterABI from '@uniswap/universal-router/abi/UniversalRouter.json'
const provider = new ethers.JsonRpcProvider('https://mainnet.infura.io/v3/YOUR_KEY')
const router = new ethers.Contract(
'0xEf1c6E67703c7BD7107eed8303Fbe6EC2554BF6B',
UniversalRouterABI,
provider
)
async function main() {
console.log(await provider.getBlockNumber())
}
main()
Проверка уязвимостей:
npm audit
Автоматическое исправление:
npm audit fix
В средах вроде Lerna или Turborepo установка производится на уровне workspace:
npm install @uniswap/universal-router -w packages/app
Для ускорения CI/CD процессов:
npm ci
Используется вместо npm install для воспроизводимых
сборок.
Universal Router работает с:
Адрес контракта зависит от сети, поэтому рекомендуется хранить конфигурацию отдельно:
const ROUTER_ADDRESSES = {
mainnet: '0x...',
arbitrum: '0x...',
}
Перед деплоем:
npm prune --production
Удаляются dev-зависимости, уменьшая размер сборки.
npm list @uniswap/universal-router
Или в коде:
import pkg from '@uniswap/universal-router/package.json'
console.log(pkg.version)