10 июня 2024 г. (изменено: 10 июня 2024 г.)

Канал: @cherkashindev

1 766

peerDependencies

Недавно делал код ревью и заметил, что в pnpm-lock.yaml (альтернатива yarn.lock в pnpm) добавлена 17-я версия реакта, хотя на проекте мы используем 18-ю. Нам не нужно тянуть в проект 2 версии реакта — поэтому идём разбираться.

Дело в том, что в библиотеке react-cheetah-grid, которую мы используем для рендера длинных таблиц, реакт указан в секции dependencies вместо peerDependencies.

dependencies vs peerDependencies

  • dependencies: пакеты, которые необходимы для работы вашего приложения и устанавливаются автоматически
  • peerDependencies: пакеты, которые должны быть уже установлены в среде, где используется ваш пакет, чтобы избежать конфликтов версий

Чтобы быстро исправить проблему — можно переопределить версию реакта для определённого пакета в pnpm с помощью метода readPackage. Также нужно откатить изменения в pnpm-lock.yaml и запустить pnpm install .

 
// .pnpmfile.cjs
 
const package = require('./package.json');
 
function readPackage(pkg, context) {
  if (pkg.name === "react-cheetah-grid") {
    pkg.dependencies['react'] = package.dependencies['react'];
    pkg.dependencies['react-dom'] = package.dependencies['react-dom'];
  }
  
  return pkg;
}
 
module.exports = {
  hooks: {
    readPackage,
  },
};

Но затем лучше создать ишью в репозитории библиотеки или отправить пул реквест.

👍 20 🔥 4