Diberikan sebuah paket dengan beberapa ruang kerja, npm install
menginstal semua paket dari root dan paket ruang kerja ke root node_modules
. Tidak seperti benang, tidak ada ketergantungan paket ruang kerja yang diinstal ke paket ruang kerja masing-masing node_modules
. Artinya, tidak mungkin menjalankan skrip secara langsung jika direktori kerja saat ini adalah sub-paket.
Juga tampaknya belum ada perintah npm workspace
untuk menjalankan skrip dari paket ruang kerja (bandingkan dengan yarn workspace
).
Posting blog ini menyebutkan bahwa fitur ruang kerja npm harus berfungsi mirip dengan salah satu benang:
npm v7 akan memiliki setidaknya dukungan fitur Ruang Kerja dari Yarn, dan akan mengatur panggung untuk fitur ruang kerja yang lebih canggih di v8.
https://blog.npmjs.org/post/186983646370/npm-cli-roadmap-summer-2019
Saya berharap dapat:
npm workspace @me/workspace-package1 my-script
untuk menjalankan skrip my-script
di paket ruang kerja @me/workspace-package1
(mis. Terletak di paket / paket1)cd packages/package1 && npm run my-script
Saya telah membuat taman bermain ruang kerja untuk bereksperimen dengan paket ruang kerja dan membandingkan benang dan npm7:
https://github.com/fabb/npm7-workspaces
npm install
(berhasil)cd applications/app1 && npm run build
tsc
tidak dapat ditemukanSekarang coba dengan benang:
yarn
(berhasil)cd applications/app1 && yarn run build
Alternatifnya dengan benang:
yarn
(berhasil)yarn workspace @fabb/app1 build
RFC untuk ruang kerja: https://github.com/npm/rfcs/blob/latest/accepted/0026-workspaces.md
Tautan ke ruang kerja RFC adalah https://github.com/npm/rfcs/blob/latest/implemented/0026-workspaces.md
Saya punya pertanyaan terkait dengan fitur ruang kerja npm7. Jika saya harus menginstal paket hanya ke ruang kerja tertentu, apa perintah npm untuk melakukan itu. Yarn dan Lerna sama-sama mendukung ini.
Asumsikan ruang kerja berikut ini.
{
"workspaces": ["packages/*"]
}
root
+ -- packages
+ -- package-a
+ -- package-b
$ yarn workspace package-a add react
lerna add mendukung opsi filter lerna
$ lerna add react --scope=package-a
Pertanyaan. Apakah ruang kerja npm, seperti benang , juga memerlukan paket root untuk memiliki "private": true
? Dokumentasi harus menyertakan informasi seputar ini.
Meskipun tidak ideal; hingga masalah ini teratasi, solusinya adalah dengan menggunakan opsi --prefix
(lihat dokumen ).
Misalnya, menggunakan langkah-langkah @fabb untuk mereproduksi dengan repo npm7-workspaces dan mengganti perintah langkah 2 dengan yang berikut:
npm run --prefix applications/app1 build
Pembangunan berhasil:
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
Pertanyaan. Apakah ruang kerja npm, seperti benang , juga memerlukan paket root untuk memiliki
"private": true
? Dokumentasi harus menyertakan informasi seputar ini.
@detj tidak, sejauh yang saya uji tidak.
Komentar yang paling membantu
Meskipun tidak ideal; hingga masalah ini teratasi, solusinya adalah dengan menggunakan opsi
--prefix
(lihat dokumen ).Misalnya, menggunakan langkah-langkah @fabb untuk mereproduksi dengan repo npm7-workspaces dan mengganti perintah langkah 2 dengan yang berikut:
Pembangunan berhasil: