Untuk menginstal dependensi bagi satu paket dalam proyek npm workspace di macOS, jalankan npm install --workspace="packages/web" dari root proyek, dengan mengganti packages/web dengan jalur workspace atau nama paketnya. Anda juga dapat berpindah ke direktori workspace tersebut dan menjalankan npm install. Perintah-perintah ini memilih workspace di dalam proyek npm; perintah tersebut tidak membuat direktori instalasi terpisah atau menjamin bahwa hanya berkas paket tersebut yang akan berubah.

Periksa apakah proyek tersebut merupakan npm workspace

npm workspace adalah direktori paket yang terdaftar di package.json tingkat root di bawah workspaces. Misalnya, sebuah repositori mungkin berisi root package.json dan sebuah packages/web/package.json, dengan "packages/*" dalam daftar workspace milik root. npm menggunakan konfigurasi tersebut untuk mengenali dan menautkan paket-paket lokal. Jika folder tersebut tidak dikonfigurasi sebagai workspace, --workspace tidak dapat menargetkannya sebagai workspace. Lihat dokumentasi workspaces milik npm.

Di Terminal, buka root repositori. Di macOS, gunakan tanda kutip pada jalur yang mengandung spasi agar shell memperlakukan jalur tersebut sebagai satu argumen:

cd "$HOME/Projects/sample monorepo"
npm install --workspace="packages/web"

Di sini, packages/web adalah contoh jalur relatif terhadap root repositori. Anda juga dapat menggunakan nama paket dari workspace yang telah dikonfigurasi, seperti npm install --workspace="@example/web". npm mendokumentasikan nama workspace, jalur direktori workspace, dan jalur workspace induk sebagai selektor yang valid. Lebih disukai menggunakan jalur atau nama paket yang spesifik: memilih direktori workspace induk dapat memilih setiap workspace di bawahnya. Opsi npm install dari npm menjelaskan selektor ini.

Menginstal dependensi yang dideklarasikan pada workspace yang dipilih

Perintah di atas menjalankan instalasi dalam konteks workspace yang dipilih. Tanpa ada nama paket setelah install, npm menginstal dependensi yang sudah dideklarasikan dalam manifes proyek; perintah ini tidak menambahkan dependensi baru ke packages/web/package.json. Konfigurasi workspace npm secara default mengecualikan proyek root saat satu workspace individual dipilih, kecuali jika include-workspace-root diaktifkan. Referensi konfigurasi npm mendokumentasikan kedua opsi tersebut.

Untuk paket yang ingin Anda tambahkan, sertakan namanya sebelum selektor workspace:

npm install date-fns --workspace="packages/web"

Perintah ini meminta npm untuk menambahkan date-fns ke dependensi workspace tersebut dan menginstalnya. Periksa package.json milik workspace setelahnya untuk memastikan dependensi tersebut dicatat di tempat yang dimaksudkan. Panduan workspaces dari npm memberikan pola yang sama untuk menambahkan dependensi ke workspace bernama.

Gunakan direktori workspace sebagai alternatif

Jika Anda sudah bekerja di dalam folder paket tersebut, Anda dapat menjalankan npm install di sana daripada menentukan --workspace:

cd "$HOME/Projects/sample monorepo/packages/web"
npm install

npm mendokumentasikan bahwa menjalankan perintah dari dalam sebuah workspace secara implisit menyetel konteks workspace dan menggunakan root workspace sebagai awalan proyek. Hal ini bisa memudahkan dalam tab terminal yang dikhususkan untuk satu paket. Jika Anda tidak yakin direktori saat ini milik paket yang mana, gunakan perintah --workspace secara eksplisit dari root repositori yang sudah dipastikan.

Pahami apa arti dan bukan arti dari "satu workspace"

Memilih satu workspace membatasi konteks workspace dari perintah tersebut; ini tidak menjanjikan struktur pohon node_modules yang terpisah secara fisik. npm workspaces dikelola dari proyek tingkat teratas, dan npm dapat menautkan workspace lokal ke dalam direktori node_modules di root. Dependensi dapat di-hoist atau dibagikan jika struktur dependensi memungkinkannya. Oleh karena itu, instalasi dapat memengaruhi kondisi instalasi bersama dan lockfile milik repositori. Tinjau perubahan yang dihasilkan dalam kontrol versi, terutama jika Anda mengharapkan perubahan sistem berkas hanya terjadi pada satu paket. Dokumentasi penginstalan npm menjelaskan perilaku pohon dependensi dan penautan workspace.

Jika tujuan Anda adalah instalasi mandiri yang sepenuhnya terisolasi dari monorepo, selektor workspace bukanlah mekanismenya. Sebuah workspace adalah bagian dari proyek root yang dikonfigurasi; menargetkannya tidak mengubahnya menjadi repositori independen atau pohon instalasi yang berdiri sendiri.

Jika npm tidak mengenali target

Pertama, verifikasi bahwa jalurnya benar relatif terhadap root repositori dan bahwa package.json-nya memang ada. Kemudian periksa package.json di root dan pastikan pola workspaces-nya mencakup folder tersebut. Jika menggunakan nama, pastikan namanya cocok dengan bidang name pada paket workspace tersebut. Jalankan perintah dari root repositori, atau berpindah langsung ke direktori workspace yang dituju. Hindari penggunaan --workspaces saat Anda hanya menginginkan satu paket: opsi jamak tersebut memilih semua workspace yang dikonfigurasi. Aturan praktisnya sederhana: gunakan --workspace="path" dari root saat Anda menginginkan target yang eksplisit, dan verifikasi manifes serta perubahan repositori setelah npm selesai.

Sumber