هل تريد طلب ميزة أو الإبلاغ عن خطأ ؟
Bug 🐜 😱 Yarn يختار إصدارات مختلفة من NPM مع نفس محدد الإصدار.
ما هو السلوك الحالي؟
aes-decrypter
في npm: { latest: '1.0.3', beta: '1.0.0-0', next: '1.1.0' }
video.js
في npm: { latest: '5.11.9', next: '5.12.6', alpha: '5.9.0-2' }
videojs-contrib-hls
تعتمد على aes-decrypter@^1.0.3'
و video.js@^5.10.1
videojs-contrib-hls@^3.6.7
في package.json
:{
"name": "yarn-next-bug-test",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"dependencies": {
"videojs-contrib-hls": "^3.6.7"
}
}
yarn
الحزم المثبتة والمضافة إلى yarn.lock هي:
ما هو السلوك المتوقع؟
ما يفعله NPM بنفس الحزمة. json:
يرجى ذكر node.js والغزل وإصدار نظام التشغيل.
node.js v7.0.0
كل من الغزل v0.16.0 و v0.19.0-0 (master at f0d875a67a06d8b2405be177d0c43820442d802b) بهما الخلل
كل من npm v3.10.9 و v4.0.2 يفعل الشيء المتوقع
macOS Sierra 10.12.2 Beta (16C32f)
واجهت نفس الشيء. يبدو أن هذا يحدث بشكل خاطئ في NpmResolve#findVersionInRegistryResponse
، حيث لا يكون range
مطلقًا مفتاحًا لـ dist-tags
للاعتماديات المتعدية ولكن ببساطة نطاق semver ، و config.resolveConstraint
ثم يعود ببساطة أعلى واحد.
(خير مثال على وقوع الكارثة هو آلية إطلاق الكناري المكسورة بشكل مروع لـ lerna ، والتي تنتج إصدارات ما قبل الإصدار من semver والتي تنتهي بتجزئة الالتزام القصيرة git. أعتقد أن المبرمجين الحقيقيين دائمًا ما يعدون تنازليًا ، ويبدأون من "f".)
أواجه هذه المشكلة أيضًا مع حزمة الكتابة.
تشغيل npm view typescript 'dist-tags'
يعطي هذا الناتج:
{ latest: '2.0.10',
next: '2.2.0-dev.20161129',
beta: '2.0.0',
rc: '2.1.1',
insiders: '2.0.6-insiders.20161017' }
يعمل تشغيل npm install
تثبيت الإصدار 2.0.10
بعد تشغيل الغزل لدي هذا الإدخال في yarn.lock
typescript@^2.0.9:
version "2.1.1"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.1.1.tgz#41c2b64472f529331b2055c0424862b44ce58d42"
يمكنك أن تجادل من يفعل الخطأ. أعتقد أن الغزل يتبع semver ويبحث عن أحدث إصدار صالح وهو 2.1.1 في حالتي.
يبدو أن Npm تستخدم المعلومات من علامات dist ومن المفترض أن تستخدم الكتابة المطبوعة الإصدار "2.1.1-rc".
تمت مصادفة هذا عند تثبيت nightmare
عبر الغزل - يعتمد الكابوس على electron@^1.4.4
الذي يتحول إلى 1.6.0
وهو أقل من beta
dist-tag on npm. أحدث إصدار هو 1.4.15
. لقد كتبت رمزًا بدون علمي مقابل إصدار تجريبي من الإلكترون ، والآن أحتاج إلى تقليله لتشغيله على الإنتاج.
كان الحل هو التصريح صراحةً عن إصدار electron
الذي أردته في package.json
بشكل منفصل.
التعليق الأكثر فائدة
تمت مصادفة هذا عند تثبيت
nightmare
عبر الغزل - يعتمد الكابوس علىelectron@^1.4.4
الذي يتحول إلى1.6.0
وهو أقل منbeta
dist-tag on npm. أحدث إصدار هو1.4.15
. لقد كتبت رمزًا بدون علمي مقابل إصدار تجريبي من الإلكترون ، والآن أحتاج إلى تقليله لتشغيله على الإنتاج.كان الحل هو التصريح صراحةً عن إصدار
electron
الذي أردته فيpackage.json
بشكل منفصل.