Cli: [BUG] تنفيذ البرنامج النصي لحزمة مساحة العمل npm 7

تم إنشاؤها على ٦ أكتوبر ٢٠٢٠  ·  5تعليقات  ·  مصدر: npm/cli

السلوك الحالي:

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

أيضًا لا يبدو أنه يوجد أمر npm workspace لتنفيذ البرامج النصية من حزم مساحة العمل (مقارنة بـ yarn workspace ).

سلوك متوقع:

ذكر منشور المدونة هذا أن ميزة مساحات العمل npm يجب أن تعمل بشكل مشابه لميزة الغزل:

سيحظى npm v7 على الأقل بدعم ميزة Workspace لـ Yarn ، وسيمهد الطريق لمزيد من ميزات مساحة العمل المتقدمة في الإصدار 8.
https://blog.npmjs.org/post/186983646370/npm-cli-roadmap-summer-2019

أتوقع أن أكون قادرًا على:

  1. نفذ npm workspace @me/workspace-package1 my-script لتشغيل البرنامج النصي my-script في حزمة مساحة العمل @me/workspace-package1 (على سبيل المثال ، موجود في الحزم / الحزمة
  2. cd في حزمة مساحة عمل وتشغيل برنامج نصي مباشرة من هناك: cd packages/package1 && npm run my-script

خطوات الاستنساخ:

لقد أنشأت ملعبًا لمساحة العمل لتجربة حزم مساحة العمل ومقارنة الغزل و npm7:
https://github.com/fabb/npm7-workspaces

  1. في الريبو ، قم بتشغيل npm install (نجح)
  2. في المحطة cd applications/app1 && npm run build
  3. فشل الإصدار لأنه لا يمكن العثور على tsc

جرب الآن مع الغزل:

  1. في الريبو ، قم بتشغيل yarn (نجح)
  2. في المحطة cd applications/app1 && yarn run build
  3. نجح البناء

بدلا من ذلك مع الغزل:

  1. في الريبو ، قم بتشغيل yarn (نجح)
  2. في المحطة yarn workspace @fabb/app1 build
  3. نجح البناء

بيئة:

  • نظام التشغيل: macOS Catalina 10.15.7
  • العقدة: v12.18.0
  • npm: 7.0.0-rc.2

ذات صلة

RFC لمساحات العمل: https://github.com/npm/rfcs/blob/latest/accepted/0026-workspaces.md

Bug Enhancement Release 7.x

التعليق الأكثر فائدة

رغم أنها ليست مثالية ؛ حتى يتم حل هذه المشكلة ، فإن الحل هو استخدام الخيار --prefix (انظر المستندات ).

على سبيل المثال ، باستخدام خطوات fabb لإعادة الإنتاج باستخدام مساحات عمل repo

npm run --prefix applications/app1 build

نجح البناء:

npm7-workspaces % npm -v
7.0.2

npm7-workspaces % npm run --prefix applications/app1 build

> @fabb/[email protected] build
> tsc index.ts

npm7-workspaces % echo $?

0

ال 5 كومينتر

الارتباط إلى مساحات العمل RFC هو https://github.com/npm/rfcs/blob/latest/implemented/0026-workspaces.md

كان لدي سؤال يتعلق بميزة مساحات العمل npm7. إذا اضطررت إلى تثبيت حزمة على مساحة عمل محددة فقط ، فما هو الأمر npm للقيام بذلك. يدعم كل من الغزل واليرنا هذا.

افترض مساحات العمل التالية.

{
  "workspaces": ["packages/*"]
}
root
+ -- packages
  + -- package-a
  + -- package-b

غزل

$ yarn workspace package-a add react

ليرنا

تدعم إضافة lerna خيارات مرشح lerna

$ lerna add react --scope=package-a

سؤال. هل تتطلب مساحات عمل npm ، مثل الغزل ، أن تحتوي الحزمة الجذر أيضًا على "private": true ؟ يجب أن تتضمن الوثائق معلومات حول هذا.

رغم أنها ليست مثالية ؛ حتى يتم حل هذه المشكلة ، فإن الحل هو استخدام الخيار --prefix (انظر المستندات ).

على سبيل المثال ، باستخدام خطوات fabb لإعادة الإنتاج باستخدام مساحات عمل repo

npm run --prefix applications/app1 build

نجح البناء:

npm7-workspaces % npm -v
7.0.2

npm7-workspaces % npm run --prefix applications/app1 build

> @fabb/[email protected] build
> tsc index.ts

npm7-workspaces % echo $?

0

سؤال. هل تتطلب مساحات عمل npm ، مثل الغزل ، أن تحتوي الحزمة الجذر أيضًا على "private": true ؟ يجب أن تتضمن الوثائق معلومات حول هذا.

detj لا ، بقدر ما اختبرت لا.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات