نظرًا لحزمة بها العديد من مساحات العمل ، يقوم 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
أتوقع أن أكون قادرًا على:
npm workspace @me/workspace-package1 my-script
لتشغيل البرنامج النصي my-script
في حزمة مساحة العمل @me/workspace-package1
(على سبيل المثال ، موجود في الحزم / الحزمة cd packages/package1 && npm run my-script
لقد أنشأت ملعبًا لمساحة العمل لتجربة حزم مساحة العمل ومقارنة الغزل و npm7:
https://github.com/fabb/npm7-workspaces
npm install
(نجح)cd applications/app1 && npm run build
tsc
جرب الآن مع الغزل:
yarn
(نجح)cd applications/app1 && yarn run build
بدلا من ذلك مع الغزل:
yarn
(نجح)yarn workspace @fabb/app1 build
RFC لمساحات العمل: https://github.com/npm/rfcs/blob/latest/accepted/0026-workspaces.md
الارتباط إلى مساحات العمل 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 لا ، بقدر ما اختبرت لا.
التعليق الأكثر فائدة
رغم أنها ليست مثالية ؛ حتى يتم حل هذه المشكلة ، فإن الحل هو استخدام الخيار
--prefix
(انظر المستندات ).على سبيل المثال ، باستخدام خطوات fabb لإعادة الإنتاج باستخدام مساحات عمل repo
نجح البناء: