Untuk memeriksa apa yang sebenarnya akan dikirimkan oleh paket npm workspace bersama, jalankan pengujiannya dari monorepo, kemas (pack) workspace tersebut, lalu instal tarball tersebut di direktori konsumen sementara terpisah di Mac Anda. Cara ini menangkap masalah yang tersembunyi oleh symlink workspace lokal npm, seperti file build yang hilang atau titik masuk (entry point) paket yang salah. Cara ini tidak memublikasikan apa pun ke registry.

1. Jalankan pengujian paket itu sendiri dari root workspace

Buka Terminal dan berpindahlah ke root monorepo—direktori yang berisi package.json tingkat root. Pastikan paket tersebut muncul di konfigurasi workspaces root dan memiliki package.json sendiri. npm menginstal workspace yang dikonfigurasi sebagai tautan di node_modules root, sehingga pengujian yang dijalankan di sana dapat me-resolve kode sumber workspace langsung. Opsi workspace memungkinkan Anda menargetkan paket berdasarkan nama atau direktori yang dideklarasikan. npm Workspaces

Jalankan skrip pengujian paket berdasarkan nama workspace-nya, dengan mengganti nama tersebut sesuai package.json-nya:

npm run test --workspace=@acme/math

Jika paket menggunakan nama skrip yang berbeda, gunakan nama tersebut. Jika tidak memiliki skrip pengujian, perintah ini tidak dapat menguji perilakunya; jalankan pemeriksaan yang sebenarnya didefinisikan oleh proyek, seperti skrip build atau lint. Hindari hanya mengandalkan perintah pengujian di tingkat root: perintah npm seperti test beroperasi pada tingkat root kecuali Anda memilih workspace tertentu. npm Workspaces

2. Tinjau dan buat tarball paket

Pengujian workspace lokal tidak membuktikan bahwa file yang dibutuhkan konsumen disertakan dalam paket. Pertama, pratinjau isi paket workspace yang dipilih dari root monorepo:

npm pack --workspace=@acme/math --dry-run

Tinjau daftar file untuk titik masuk paket, hasil build (built output), deklarasi tipe, dan file lain apa pun yang dijanjikan oleh paket tersebut. Pengaturan files, .npmignore, dan .gitignore pada npm memengaruhi kontennya; package.json serta file README dan lisensi termasuk di antara file yang disertakan npm secara default. Periksa bahwa main atau exports mengarah ke file yang akan ada di dalam arsip. npm pack, package.json files and entry points

Jika daftarnya sudah benar, buat tarball sebenarnya di direktori sementara. Perintah berikut menggunakan tanda kutip yang kompatibel dengan zsh default macOS dan menjaga artefak tetap berada di luar repositori Anda:

scratch="$(mktemp -d "${TMPDIR:-/tmp}/workspace-package-check.XXXXXX")"
npm pack --workspace=@acme/math --pack-destination="$scratch"

--dry-run hanya melaporkan apa yang akan dikemas oleh npm; opsi ini tidak membuat arsip. Perintah kedua benar-benar membuatnya, tetapi tidak mengunggahnya. Dokumentasi npm menjelaskan npm pack berfungsi untuk membuat tarball dan mengenali pemilih workspace. npm pack

3. Instal arsip di folder konsumen yang bersih

Temukan jalur tarball, buat direktori konsumen terpisah, dan instal arsip di sana. Contoh ini mengasumsikan hanya satu tarball yang dikemas ke dalam direktori sementara:

tarball="$(find "$scratch" -maxdepth 1 -name '*.tgz' -print -quit)"
consumer="$scratch/consumer"
mkdir -p "$consumer"
cd "$consumer"
npm init -y
npm install "$tarball"

Menginstal file .tgz menguji artefak yang dikemas. Menginstal folder workspace atau menggunakan dependensi tertaut monorepo dapat berperilaku secara berbeda. npm install

Sekarang coba gunakan paket tersebut melalui titik masuk publiknya. Gunakan nama paket yang sebenarnya dan pemeriksaan konsumen sederhana yang sesuai dengan API-nya—misalnya, require atau import paket tersebut, lalu panggil fungsi ekspor yang representatif. Jalankan pemeriksaan tersebut dari direktori konsumen, tempat paket di-resolve dari node_modules yang baru diinstal. Jika proyek memublikasikan output yang dikompilasi, verifikasi bahwa proses build telah dijalankan sebelum pengemasan; jika tidak, arsip mungkin kehilangan file meskipun pengujian saat tahap pengembangan lolos.

4. Diagnosis kegagalan sebelum memublikasikan

Jika instalasi gagal, periksa apakah arsip memiliki package.json dengan name dan version, lalu periksa daftar filenya dan pastikan titik masuk yang dikonfigurasi ada di dalam tarball. Jika proses import gagal, bandingkan format modul konsumen dengan pengaturan type, main, dan exports pada paket. Sebuah paket dapat lolos pengujian workspace namun gagal di sini karena pengujian tersebut mungkin memuat file sumber secara langsung atau me-resolve dependensi yang tidak dideklarasikan dari monorepo.

Jika suatu dependensi adalah workspace lain yang belum dipublikasikan, uji juga skema rilis yang direncanakan. Konsumen yang menginstal satu tarball tidak akan secara otomatis menerima kode sumber workspace pendamping (sibling) melalui tautan monorepo. Pastikan paket pendamping dipublikasikan/tersedia pada versi yang kompatibel, atau gunakan penyiapan terbundel atau terinstal yang disengaja. Prosedur ini memverifikasi paket yang dikemas secara lokal di lingkungan Mac/Node saat ini; prosedur ini tidak dapat memastikan perilaku di setiap versi Node, sistem operasi, atau konfigurasi registry.

Titik akhir yang tepat untuk berhenti adalah ketika pengujian workspace berhasil lolos, daftar file paket tampak masuk akal, dan pemeriksaan konsumen yang menginstal serta menjalankan tarball dari luar monorepo berhasil dilakukan. Simpan direktori sementara jika Anda perlu memeriksanya, atau hapus dengan rm -rf "$scratch" setelah memastikan bahwa variabel tersebut masih merujuk ke jalur sementara yang dibuat.

Sumber