файл package-lock.json, пакет с "опционально": true

npm

один из моих PR-коллег по работе содержит обновление package-lock.json, в которое добавлено необязательное значение: true. Я не уверен, что это даже после того, как погуглил. Может кто-нибудь объяснить, пожалуйста?

Ответ 1

С https://docs.npmjs.com/files/package-lock.json#optional:

Если true, то эта зависимость является либо необязательной зависимостью ТОЛЬКО модуля верхнего уровня, либо транзитивной зависимостью одного. Это неверно для зависимостей, которые являются необязательной зависимостью верхнего уровня и транзитивной зависимостью необязательной зависимости верхнего уровня.

Безопасно объединить это изменение.

Причина, по которой вы видите это изменение, наиболее вероятна, потому что npm немного изменил структуру package-lock.json в версии 6.6. Ваш друг в основном запустил npm install с npm 6. 6+ на package-lock.json, ранее сгенерированном с npm 6. 5-.

Вы должны быть в состоянии избежать такого рода проблем, убедившись, что все в вашей команде используют последнюю версию npm.

Ответ 2

После удаления пакета из зависимостей его зависимости помечаются как "optional": true в package-lock.json.

Обычно безопасно удалять такие пакеты вручную или с помощью

$ rm -rf package-lock.json node_modules/
$ npm install

Однако это не на 100% безопасно, так как некоторые пакеты будут обновлены до более новых версий.

Ответ 3

Одной из причин будет:

Для некоторых пакетов npm могут потребоваться зависимые пакеты (например, minimist) для работы в разных ОС. NPM помечает эти пакеты как дополнительные при установке npm, если это вообще не требуется, в зависимости от используемой ОС.

Пожалуйста, проверьте следующую проблему:

Открытый выпуск: package-lock.json и дополнительные пакеты: https://github.com/npm/npm/issues/17722

Надеюсь, поможет.