هل تريد طلب ميزة أو الإبلاغ عن خطأ ؟
خلل برمجي.
ما هو السلوك الحالي؟
لا يحترم الغزل أقفال الإصدار المضافة بالفعل عند حل تبعيات التبعيات المضافة حديثًا.
إذا كان السلوك الحالي عبارة عن خطأ ، فيرجى تقديم خطوات إعادة الإنتاج.
yarn add [email protected]
yarn add [email protected]
$ yarn list react
yarn list v1.1.0
├─ [email protected]
└─ [email protected]
└─ [email protected]
✨ Done in 0.24s.
ما هو السلوك المتوقع؟
من المتوقع أن يتم تثبيت [email protected] فقط لأن ذلك يمكن أن يفي بجميع قيود الإصدار. هذا ما يحدث إذا قمت بحذف yarn.lock
بعد وجود كلا التبعيتين في package.json و yarn install
ie
$ rm -rf node_modules/ yarn.lock && yarn install && yarn list react
yarn list v1.1.0
└─ [email protected]
✨ Done in 0.17s.
يرجى ذكر node.js والغزل وإصدار نظام التشغيل.
$ node --version
v6.9.4
$ yarn --version
1.2.0
$ system_profiler SPSoftwareDataType|grep "System Version"
System Version: macOS 10.12.6 (16G29)
تحرير: تم إجراء النسخ الأصلي باستخدام الغزل 1.1.0 ، لكنني قمت بالترقية إلى 1.2.0 ولا يزال هذا يعيد إنتاجه.
أنا أحفر في هذا ...
ملاحظة أن المعلمات التي تم تمريرها إلى PackageResolver.getHighestRangeVersionMatch(name, range, manifest)
قد تكون غير صحيحة. يبدو أن range
هو الإصدار الفردي الفعلي الذي تم حله ( 15.6.2
) بدلاً من النطاق المطلوب ( ^15.5.4
).
وهذا بدوره يتراكم حتى السطر الذي يتحقق منه لمعرفة ما إذا كانت أي إصدارات مثبتة حاليًا تتطابق مع نطاق semver: semver.maxSatisfying(["15.6.1"], '15.6.2'); // null
إذا تم تمرير النطاق الصحيح ، فسيتم تنفيذ semver.maxSatisfying(["15.6.1"], '^15.5.4'); // 15.6.1
وهو ما يجب حل هذه المشكلة.
سأستمر في التراجع من خلال الكود ...
حسنًا ، يبدو أن هذا تم تقديمه بواسطة # 3729 تحديدًا السطر الموجود في package-request.js
:
const solvedRange = semver.validRange(range) ? info.version : range;
لذا إذا كان النطاق ( ^15.5.4
) صالحًا ، فإننا نستخدم info.version
بدلاً من ذلك ( 15.6.2
).
يتم تمرير ذلك لمعرفة ما إذا كانت أي إصدارات مثبتة تطابق 15.6.2
:
const maxValidRange = semver.maxSatisfying(['15.6.1'], '15.6.2'); // null
arcanis يبدو أن العلاقات العامة المرتبطة كانت ملكك. أنا متردد في تغيير أي شيء وأخاطر بإعادة فتح أي شيء يتم إصلاحه في العلاقات العامة. هل يمكنك مد يد المساعدة؟
سوف ننظر في هذا اليوم 👍
سوو ، دعنا نحاول إصلاح ذلك! لا أحب أن تعتمد الحزم على الرفع (ضع علامة على كلماتي - حتى لو قمنا بإصلاحها ، فسوف تتعطل مرة أخرى في المستقبل) ، لكننا نجعلها أقل كفاءة مما قد تكون ليست رائعة أيضًا. إعادة ما وضعته على # 5561:
أنا لا أفهم حقًا المنطق أعلاه. إذا كان النطاق semver صالحًا ، فلا تستخدمه؟
أنت محق ، هذا لا معنى له كثيرًا: / أعتقد أن ما أردت فعله هو "إذا لم يكن هذا إصدارًا ولكنه نطاق ، فاستخدم الإصدار الذي لدينا بالفعل إن أمكن" (منذ الهدف من العلاقات العامة هو عدم القيام بالتحسين عند القراءة من ملف القفل). على هذا النحو يجب أن تكون الحالة على الأرجح:
const solvedRange = semver.valid(range) && !semver.validRange(range) ? range : info.version;
التعليق الأكثر فائدة
سوف ننظر في هذا اليوم 👍