Почему `npm install` генерирует разные файлы` package-lock.json` для одного и того же файла `package.json`? - PullRequest
0 голосов
/ 11 июня 2018

Вот соответствующая часть моего package.json файла:

  "devDependencies": {
    "ajv": "^6.0.0",
    "webpack": "^4.0.0",
    "websocket": "^1.0.0",
    "bignumber.js": "^7.0.0",
    "decimal.js": "^10.0.0",
    "truffle": "4.1.11",
    "ganache-cli": "6.1.0",
    "solidity-coverage": "0.5.4",
    "ethereumjs-testrpc-sc": "6.1.2",
    "web3": "1.0.0-beta.34"
  }

У меня есть этот файл в двух разных репозиториях на одном компьютере.

Когда я запускаю npm installв каждом из этих репозиториев одновременно, я получаю разные package-lock.json файлы в каждом репозитории.

Как это может быть?

Вот возможная подсказка:

Если я предварительно удалю файл package-lock.json, то npm install прерывается с ошибкой.

Так что ответ на мой вопрос, возможно, связан с тем фактом, что npm install опирается на уже существующий package-lock.json file.

И изначально у меня были разные файлы package-lock.json в этих репозиториях, потому что соответствующие package.json файлы были другими.

Теперь, когда я изменил файл package.jsonв одном из репозиториев, который будет идентичен другому, я ожидаю, что соответствующие файлы package-lock.json также станут идентичными.

1 Ответ

0 голосов
/ 11 июня 2018

From https://docs.npmjs.com/files/package-locks

"Концептуально," input "для npm-install - это package.json, а его" output "- это полностью сформированное дерево node_modules: представление объявленных вами зависимостейВ идеальном мире npm будет работать как чистая функция: тот же пакет.json должен в любое время создавать одно и то же дерево node_modules. В некоторых случаях это действительно так. Но во многих других npm не может этого сделать.Для этого есть несколько причин:

  • для установки пакета могли использоваться разные версии npm (или других менеджеров пакетов), каждая из которых использует несколько разные алгоритмы установки. "

Файл блокировки пакета гарантирует, что ничего не сломается из-за немного отличающихся версий пакетов, запуск npm install на одном компьютере в одно и то же время не гарантирует, что будет получена одна и та же версия всех зависимостей.

Еще один момент, который может прояснить, чем файл пакета отличается от файла блокировки пакета.Два идентичных файла package.json не гарантируют одинаковую структуру папок node_modules.Но два идентичных файла блокировки пакетов гарантируют одинаковую структуру файла node_modules.

...