javascript - update - npm شرح




كيف يمكنني تحديث كل تبعية في package.json إلى أحدث إصدار؟ (19)

TLDR. (تم تحديثه لإصدارات NPM الجديدة)

تغيرت الأشياء قليلاً منذ أن كتبت هذه الإجابات في الأصل.

npm 2+: npm outdated + npm update npm shrinkwrap + npm shrinkwrap

أقدم npm: npm-check-updates package + npm shrinkwrap

تأكد من تقليص الاعطال ، أو قد ينتهي مع مشروع ميت. لقد سحبت مشروعًا في اليوم الآخر ولن يتم تشغيله لأن جميع فترات الإعارة كانت قديمة / محدثة / فوضى. إذا كنت قد تقلصت ، فإن npm قد قمت بتركيب ما احتاجه بالضبط.

تفاصيل

بالنسبة إلى الأشخاص الفضوليين الذين يصلون إلى هذا الحد ، إليك ما أوصي به:

استخدم npm-check-updates أو npm outdated لاقتراح أحدث الإصدارات.

# `outdated` is part of newer npm versions (2+)
$ npm outdated
# If you agree, update.  
$ npm update

#       OR

# Install and use the `npm-check-updates` package.
$ npm install -g npm-check-updates
# Then check your project
$ npm-check-updates
# If you agree, update package.json.
$ npm-check-updates -u

ثم القيام بتثبيت نظيف (w / o the rm حصلت على بعض تحذيرات التبعية)

$ rm -rf node_modules
$ npm install 

وأخيرًا ، احفظ الإصدارات الدقيقة على npm-shrinkwrap.json مع npm shrinkwrap

$ rm npm-shrinkwrap.json
$ npm shrinkwrap

الآن ، npm install الآن npm install الإصدارات الدقيقة في npm-shrinkwrap.json

إذا npm-shrinkwrap.json في git ، npm-shrinkwrap.json جميع عمليات التثبيت نفس الإصدارات بالضبط.

هذا هو وسيلة للانتقال من التنمية (جميع التحديثات ، كل الوقت) للإنتاج (لا أحد لمس أي شيء).

لقد قمت بنسخ package.json من مشروع آخر ، وأريد الآن أن أجمع كل الاعتمادات على أحدث إصداراتها لأن هذا مشروع جديد ولا أمانع في إصلاح شيء ما إذا انكسر.

ما هي أسهل طريقة للقيام بذلك؟

أفضل طريقة أعرفها الآن هي تشغيل npm info express version ثم تحديث package.json يدويًا لكل واحد. يجب أن تكون هناك طريقة أفضل.

{
  "name": "myproject",
  "description": "my node project",
  "version": "1.0.0",
  "engines": {
    "node": "0.8.4",
    "npm": "1.1.65"
  },
  "private": true,
  "dependencies": {
    "express": "~3.0.3", // how do I get these bumped to latest?
    "mongodb": "~1.2.5",
    "underscore": "~1.4.2",
    "rjs": "~2.9.0",
    "jade": "~0.27.2",
    "async": "~0.1.22"
  }
}

أنا الآن متعاون في npm-check-updates ، وهو حل رائع لهذه المشكلة.


  1. استخدم * كإصدار لأحدث الإصدارات ، بما في ذلك عدم الاستقرار
  2. استخدم latest تعريف الإصدار لأحدث إصدار مستقر
  3. قم بتعديل الحزمة package.json مع آخر رقم إصدار ثابت باستخدام LatestStablePackages

هنا مثال:

"dependencies": {
        "express": "latest"  // using the latest STABLE version
    ,   "node-gyp": "latest"    
    ,   "jade": "latest"
    ,   "mongoose": "*" // using the newest version, may involve the unstable releases
    ,   "cookie-parser": "latest"
    ,   "express-session": "latest"
    ,   "body-parser": "latest"
    ,   "nodemailer":"latest"
    ,   "validator": "latest"
    ,   "bcrypt": "latest"
    ,   "formidable": "latest"
    ,   "path": "latest"
    ,   "fs-extra": "latest"
    ,   "moment": "latest"
    ,   "express-device": "latest"
},

Ncu هو اسم مستعار جديد للبحث عن التحديثات. من خلال القيام بذلك ، لن تحتاج إلى تحديث أرقام إصداراتك يدويًا في package.json ncu. اتبع الطريقة أدناه إذا كنت تستخدم جهاز Linux

sudo npm i -g npm-check-updates
// decide between -u or -a
ncu -u, --upgrade and overwrite package file
ncu -a, --upgradeAll include even those dependencies whose latest 
          version satisfies the declared server dependency
sudo npm install

Updtr!

استنادًا إلى npm قديمة ، يقوم updtr بتثبيت أحدث إصدار ويدير اختبار npm لكل تبعية. إذا نجح الاختبار ، يحفظ updtr رقم الإصدار الجديد إلى الحزمة الخاصة بك. إذا فشل الاختبار ، على الرغم من ذلك ، فتقوم أداة التحديث بإعادة تغييراتها.

https://github.com/peerigon/updtr


أنا حقا أحب كيف يعمل npm-upgrade . إنها أداة سطر أوامر بسيطة تمر عبر كل تبعياتك وتتيح لك رؤية الإصدار الحالي مقارنة بأحدث إصدار وتحديث إذا كنت تريد.

في ما يلي لقطة شاشة لما يحدث بعد تشغيل npm-upgade في جذر مشروعك:

لكل تبعية يمكنك اختيار الترقية أو تجاهل أو عرض التغيير أو إنهاء العملية. لقد عملت بشكل رائع بالنسبة لي حتى الآن.


إذا كنت تستخدم Visual Studio Code على أنه IDE الخاص بك ، فهذا ملحق صغير ممتع لإجراء تحديث package.json عملية نقرة واحدة.

نسخة ينس


إذا كنت تستخدم الغزل ، فإن الأمر التالي يقوم بتحديث كل الحزم إلى أحدث إصدار لها:

yarn upgrade --latest

من docs :

حزم upgrade --latest ترقية الحزم بنفس الأمر الترقية ، ولكن يتجاهل نطاق الإصدار المحدد في package.json. بدلاً من ذلك ، سيتم استخدام الإصدار المحدد بواسطة أحدث علامة (يحتمل ترقية الحزم عبر الإصدارات الرئيسية).


اضطررت مؤخرا لتحديث العديد من المشاريع التي كانت تستخدم npm و package.json لسحرهم gruntfile.js. يعمل أمر bash التالي (أمر متعدد الأسطر) جيدًا بالنسبة لي:

npm outdated --json --depth=0 | \
jq --ascii-output --monochrome-output '. | keys | .[]' | \
xargs npm install $1 --save-dev

الفكرة هنا: npm outdated الإخراج npm outdated npm مثل json ، إلى jq
(jq هو محلل / أداة استعلام لسطر الأوامر json)
(لاحظ استخدام الوسيطة - npm outdated ل npm outdated )
سيقوم jq بإخراج الإخراج لأسفل إلى اسم حزمة المستوى الأعلى فقط.
أخيرا يضع xargs كل LIBRARYNAME واحد في كل مرة في npm install LIBRARYNAME --save-dev أمر حفظ npm install LIBRARYNAME --save-dev

ما سبق هو ما نجح في عملي على الجهاز runnning: node = v0.11.10 osx = 10.9.2 npm = 1.3.24

هذا مطلوب:
xargs http://en.wikipedia.org/wiki/Xargs (أصل إلى جهازي أؤمن)
و
jq http://stedolan.github.io/jq/ (قمت بتثبيته مع brew install jq )

ملاحظة: أقوم فقط بحفظ المكتبات المحدثة إلى package.json بداخل devDependancies مفتاح devDependancies باستخدام --save-dev ، الذي كان متطلبا --save-dev ، ممكن جدا ليس لك.

بعد ذلك أتحقق من أن كل شيء يحتوي على مرق مع بسيط

npm outdated --depth=0

أيضا ، يمكنك التحقق من الإصدارات المكتبية المثبتة toplevel الحالية مع

npm list --depth=0

الأوامر المذكورة أعلاه غير آمنة لأنك قد تكسر الوحدة النمطية الخاصة بك عند تبديل الإصدارات. بدلا من ذلك أوصي بما يلي

  • تعيين إصدار الوحدات النمطية الحالية عقدة الحقيقي في package.json باستخدام الأمر npm shrinkwrap .
  • تحديث كل تبعية إلى أحدث إصدار إذا لم تقم بتجربة اختباراتك باستخدام أداة سطر الأوامر https://github.com/bahmutov/next-update
npm install -g next-update
// from your package
next-update

البديل هو

"dependencies":{
    "foo" : ">=1.4.5"
}

في كل مرة تستخدم فيها تحديث npm ، يتم تحديثه تلقائيًا إلى أحدث إصدار. لمزيد من صيغة الإصدار ، يمكنك التحقق هنا: https://www.npmjs.org/doc/misc/semver.html


حاول اتباع الأمر إذا كنت تستخدم npm 5 والعقدة 8

تحديث npm - حفظ


خطوة واحدة سهلة:

$ npm install -g npm-check-updates && ncu -a && npm i

كتب لي الكود التالي (الذي تم قبوله) شيئًا مثل "يستغرق وقتًا طويلاً بلاه بلاه" ولم يفعل شيئًا. ربما كان استخدام العلم العالمي هو المشكلة ، أيدك.

npm i -g npm-check-updates
ncu -u
npm install

قررت استخدام محرر النصوص الخاص بي واتبع منهجًا شبه يدويًا بدلاً من ذلك.

لقد قمت بنسخ قائمة مثل هذا (أطول بكثير) من اعتمادات dev الخاصة بي package.json إلى notepad ++ محرر النص:

"browserify": "10.2.6",
"expect.js": "^0.3.1",
"karma": "^0.13.22",
"karma-browserify": "^5.2.0",

لقد قمت بتعيين وضع البحث للتعبير العادي ، استخدم ^\s*"([^"]+)".*$ نمط ^\s*"([^"]+)".*$ للحصول على اسم الحزمة واستبدله بـ npm uninstall \1 --save-dev \nnpm install \1 --save-dev . النقر على "استبدال الكل".

npm uninstall browserify --save-dev 
npm install browserify --save-dev
npm uninstall expect.js --save-dev 
npm install expect.js --save-dev
npm uninstall karma --save-dev 
npm install karma --save-dev
npm uninstall karma-browserify --save-dev 
npm install karma-browserify --save-dev

أنا نسخها مرة أخرى إلى باش وضرب دخول. تمت ترقية كل شيء وتعمل بشكل جيد. هذا كل شئ.

"browserify": "^16.1.0",
"expect.js": "^0.3.1",
"karma": "^2.0.0",
"karma-browserify": "^5.2.0",

لا أعتقد أنها مشكلة كبيرة ، حيث يجب عليك القيام بذلك فقط بين الحين والآخر ، ولكن يمكنك بسهولة كتابة نص برمجي ، والذي يوزع حزمة package.json حزمك. أعتقد أنه من الأفضل بهذه الطريقة ، لأنه يمكنك تحرير قائمتك إذا كنت تحتاج إلى شيء خاص ، على سبيل المثال الاحتفاظ بالإصدار الحالي من lib.


لتحديث تبعية واحدة إلى أحدث إصدار لها دون الحاجة إلى فتح package.json يدويًا وتغييره ، يمكنك تشغيله

npm install {package-name}@* {save flags?}

أي

npm install [email protected]* --save

للرجوع ، npm-install

كما لاحظ مستخدم Vespakoen في تعديل مرفوض ، من الممكن أيضًا تحديث حزم متعددة في وقت واحد بهذه الطريقة:

npm install --save [email protected]* [email protected]* [email protected]*

كما يوزع بطانة واحدة للقذيفة على أساس npm outdated . راجع التعديل للتعليمات البرمجية والشرح.

PS: أنا أيضا أكره الاضطرار إلى تحرير package.json يدويا لأشياء من هذا القبيل ؛)


هذا ما فعلته لتحديث كل الاعتمادات في package.json إلى أحدث:

npm install -g npm-check-updates
ncu -u --packageFile package.json 

هذا يعمل اعتبارا من الآلية الوطنية للسوق 1.3.15.

"dependencies": {
  "foo": "latest"
}

يبدو أن npm-check-updates هي الطريقة الوحيدة لتحقيق ذلك الآن.

npm i -g npm-check-updates
ncu -u
npm install

في npm <3.11:

ببساطة تغيير كل إصدار التبعية إلى * ، ثم قم بتشغيل npm update --save . ( ملاحظة: مقطوعة في الإصدارات الحديثة (3.11) من npm ).

قبل:

  "dependencies": {
    "express": "*",
    "mongodb": "*",
    "underscore": "*",
    "rjs": "*",
    "jade": "*",
    "async": "*"
  }

بعد:

  "dependencies": {
    "express": "~3.2.0",
    "mongodb": "~1.2.14",
    "underscore": "~1.4.4",
    "rjs": "~2.10.0",
    "jade": "~0.29.0",
    "async": "~0.2.7"
  }

بالطبع ، هذه هي المطرقة الحادة لتحديث التبعيات. من الجيد أن يكون المشروع - كما قلت - فارغًا ولا يمكن لأي شيء أن ينكسر.

من ناحية أخرى ، إذا كنت تعمل في مشروع أكثر نضجًا ، فمن المحتمل أن ترغب في التحقق من عدم حدوث أي تغييرات في تبعياتك قبل الترقية.

لمعرفة أي وحدات قديمة ، قم بتشغيل npm outdated . وسوف تدرج أي تبعيات مثبتة لديها أحدث الإصدارات المتاحة.


npm-check-updates هي أداة مساعدة تقوم تلقائيًا بتعديل حزمة package.json مع أحدث إصدار من جميع التبعيات

انظر npm-check-updates

$ npm install -g npm-check-updates
$ ncu -u
$ npm install 

  • npm عفا عليها الزمن
  • تحديث npm

يجب أن تحصل على أحدث الإصدارات المطلوبة والمتوافقة مع تطبيقك. ولكن ليس أحدث الإصدارات.





npm