2015-06-05 2 views
41

При запуске npm install --save somepackage, он обычно добавляет что-то вроде этого в package.json:Make `НПМ установить --save` добавить строгую версию package.json

"dependencies": { 
    "somepackage": "^2.1.0" 
} 

Поскольку версия предваряется с кареткой (^), это означает, что если вы позже запустите npm install, вместо этого он может установить версию 2.3.0. Это может быть нежелательным по довольно очевидным причинам. npm shrinkwrap полезен, но на самом деле не решает проблему.

Итак, у меня есть несколько вопросов:

  1. При установке пакета, можно указать, что вы хотите, чтобы установить конкретную версию в package.json (без каретки перед номером версии) ?
  2. При публикации пакета в npm существует ли способ предотвратить дефолт, включающий каретку перед версией, когда другие разработчики устанавливают ваш пакет?

ответ

70

Чтобы задать по умолчанию в точную версию, вы можете изменить НУЮ конфигурацию с save-exact:

npm config set save-exact true

Вы также можете указать версию добавьте в начале тильды с save-prefix

И, нет, вы не можете заставить пользователя обновить до незначительной версии или версии исправления, NPM использует semver, и это рекомендуется для публикации пакетов.

+14

Если вы хотите сделать это для конкретного пакета, вы можете добавить '--save-exact' в командной строке. Например, 'npm install --save --save-exact somepackage'. – gilly3

+1

Связанный https://www.npmjs.com/package/strict-version –

+0

это только то, что вы можете сохранить только точные версии ваших пакетов верхнего уровня - те, которые указаны в 'package.json', но не будут работать ни для каких пакеты, от которых зависят пакеты верхнего уровня. https://yarnpkg.com/, решая эту проблему с помощью файла 'yarn.lock', чтобы у вас всегда были точные версии всех ваших пакетов. – Kuncevic

0

Вы можете изменить поведение по умолчанию, используя опцию --save-exact.

// npm 
npm install --save --save-exact react 

// yarn 
yarn add --exact react 

Я создал сообщение в блоге об этом, если кто-либо ищет это в будущем.

https://www.dalejefferson.com/blog/how-to-save-exact-npm-package-versions/

+1

Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. Кроме того, в вашем случае не говорите «я объяснил код в своем сообщении в блоге», но включил в него большую часть контента, и использую ссылку только как ссылку –

+0

Спасибо за отзыв Chade, I ' ve добавил более подробно. –

Смежные вопросы