package-lock.json
⬇️
Во-первых, имеет смысл приучить всех в команде пользоваться командой "npm ci" при установке зависимостей, а не "npm install". Это полезно не только в CI/CD, но и при локальной разработке, т.к. обычно у разработчиков разные версии npm, и пакеты могут резолвиться по-разному.
В итоге npm install нужно использовать только при добавлении новых пакетов в проект.
Если вам надоели пул-реки с +2к изменений, то можно написать тест, который будет падать, если в PR есть изменения в package-lock файле и при этом нет изменений в package.json
Чтобы npm install у всех разработчиков резолвил пакеты одинаково, нужно договориться, чтобы все сидели на одной версии Node и npm (обычно это LTS). Добавьте эту версию в поле engines:
docs.npmjs.com/cli/v6/configu…
А так как лучше доверять машинам, а не людям, то есть смысл декларативно описать окружение с помощью github.com/infinitered/so… и проверять его при каждом коммите (husky + lint-staged).