اكتشفنا ذلك عندما قامت إحدى الحزم الداخلية لشركتنا ببعض إعادة البناء ونقل نقطة الدخول إلى مكان آخر في المستودع دون تذكر تحديث main
في package.json. كانت النتيجة النهائية أن npm pack
أنشأ بسعادة وسمح بنشر حزمة ليس لديها فرصة للعمل بشكل صحيح.
عند تشغيل npm pack
وبالتالي عند تشغيل npm publish
npm pack
لا تحقق من أن main
موجود في كتل القطران مما يجعل من السهل إلى حد ما خلق ونشر الحزم التي لا يمكن استخدامها من قبل المستهلكين.
npm init
وتخطى خطوات إنشاء كل شيء بالقيم الافتراضية. ستحصل على package.json
مثل هذا{
"name": "npm-repro",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
npm pack
في هذا الدليل ، ولاحظ أن كرة القطران قد تم إنشاؤها بسعادةnpm notice
npm notice 📦 [email protected]
npm notice === Tarball Contents ===
npm notice 205B package.json
npm notice === Tarball Details ===
npm notice name: npm-repro
npm notice version: 1.0.0
npm notice filename: npm-repro-1.0.0.tgz
npm notice package size: 241 B
npm notice unpacked size: 205 B
npm notice shasum: ca39bc17447e27ef2fd0dea656e0e6b473f310d7
npm notice integrity: sha512-p8tZD8W438r7t[...]7Oo0YMcAoNPzQ==
npm notice total files: 1
npm notice
npm-repro-1.0.0.tgz
لا يوجد index.js
، لذلك إذا حاولت هذه الحزمة استخدام هذه الحزمة ، فلن تعمل.
npm pack
برمز خروج غير صفري ، مما قد يؤدي أيضًا إلى فشل npm publish
ويمنع الحزم التي لا تحتوي كرات القطر الخاصة بها على main
من package.json
من النشر إلى التسجيل.واجهت شركتنا هذا عندما حاولت النشر في سجلنا الداخلي.
لست متأكدًا مما إذا كان هذا مناسبًا بشكل أفضل باعتباره خطأً مقابل npm-packlist
. لست متأكدًا تمامًا من الكيفية التي تريد بها منظمة npm
الحفاظ على فصل المخاوف بين الاثنين. أي يجب أن يقوم npm-packlist
بإرجاع قائمة بالملفات التي يجب محاولة تضمينها دون إجراء أي تحقق من الصحة بشكل أعمى وترك هذا التحقق من صحة الطلب الأعلى يتم في أي حزم تريد أن تستهلك وظيفة npm-packlist
؟
هذه ليست وظيفة npm-packlist ، إنها وظيفة npm publish
إن وجدت.
هذا يبدو منطقيا. لأي سبب من الأسباب التي اتخذتها شركتي لاستخدام npm pack
to كاختبار لمعرفة ما إذا كان النشر سيكتمل بنجاح أم لا. ربما يكون npm publish --dry-run
اختيارًا أفضل.
التعليق الأكثر فائدة
هذا يبدو منطقيا. لأي سبب من الأسباب التي اتخذتها شركتي لاستخدام
npm pack
to كاختبار لمعرفة ما إذا كان النشر سيكتمل بنجاح أم لا. ربما يكونnpm publish --dry-run
اختيارًا أفضل.