Только что обновил с 3 до 5, чтобы использовать эту функцию.
Извините, я, должно быть, упускаю что-то совершенно очевидное, но как заставить npm уважать закрепленные версии в файле package-lock.json при установке?
Допустим, у меня есть package.json
с большим количеством устаревших пакетов. npm install
приведет к появлению новых вещей и сломает мое приложение.
Например, основным пакетом, который я хочу стабилизировать, является bootstrap
- сейчас я хочу заблокировать его версию по адресу [email protected], но npm install
находит 4.0.0-beta.28.
Если я npm update
какой-либо пакет, package-lock.json обновляется.
Отпусти в мою директорию разработки.
Это моя запись в package.json для начальной загрузки:
"bootstrap": "^4.0.0-alpha.6"
И вот что я вижу для своих установленных пакетов и метаданных:
$ npm list 2>/dev/null | grep bootstrap
├─┬ [email protected]
├─┬ [email protected]
│ ├── [email protected] deduped
(env) [email protected]$ grep bootstrap package.json package-lock.json
package.json: "bootstrap": "^4.0.0-alpha.6",
package.json: "bootstrap-vue": "^0.16.1",
package-lock.json: "bootstrap": {
package-lock.json: "version": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.0.0-alpha.6.tgz",
package-lock.json: "bootstrap-vue": {
package-lock.json: "version": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-0.16.1.tgz",
package-lock.json: "bootstrap": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.0.0-alpha.6.tgz",
Выглядит хорошо. Блокировка загрузочная 4.0.0-alpha.6.
Но как я на самом деле использую этот пакет-lock.json?
Вот что я сделал:
- создал новый каталог
- скопировано в package.json и package-lock.json
- побежал
npm install
.
Не хорошо. npm снова обнаружил, что бета-версия bootstrap и package-lock.json не дали никакого эффекта, фактически она была переписана с того, что сделала npm install
. Это соответствует поведению, которое вы хотите в dev, но не говорит мне, как бы я использовал файл блокировки для стабилизации своих пакетов.
(env) [email protected]$ npm list 2>/dev/null | grep bootstrap
├── [email protected]
├─┬ [email protected]
│ ├── [email protected] deduped
(env) [email protected]$ grep bootstrap package.json package-lock.json
package.json: "bootstrap": "^4.0.0-alpha.6",
package.json: "bootstrap-vue": "^0.16.1",
package-lock.json: "bootstrap": {
package-lock.json: "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.0.0-beta.2.tgz",
package-lock.json: "bootstrap-vue": {
package-lock.json: "resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-0.16.1.tgz",
package-lock.json: "bootstrap": "4.0.0-beta.2",
-
Если я удаляю package.json и у меня есть только каталог с package-lock.json, то
npm install
устанавливает очень мало и оставляет мне усеченный package-lock.json -
У установки npm есть опция
--no-package-lock
, но она не позволяет обновить package-lock.json.
Как мне сказать npm установить все из package.json, но соблюдать блокировки в package-lock.json? Использую ли я команду, отличную от npm install
? Это потому, что npm install doc ссылается на блокировки в контексте установки пакета, но блокировки не применяются, когда вы полностью устанавливаете package.json?
Да, я знаю, что могу указать "bootstrap": "4.0.0-alpha.6"
, минус ^
, чтобы закрепить версию вручную.
Моя среда:
(env) [email protected]$ npm -v
5.5.1