Untuk menemukan direktori yang digunakan oleh skrip npm di Mac Anda, periksa paket mana yang memiliki skrip tersebut, lalu cetak direktorinya dari dalam skrip tersebut. npm menjalankan skrip dari folder paketnya, bahkan saat Anda memulai npm run dari tempat lain. Dalam proyek workspace, paket workspace yang dipilih mungkin merupakan folder yang relevan. Langkah-langkah di bawah ini membantu Anda mengidentifikasi jalur yang tepat dan membedakannya dari folder tempat Anda mengetik perintah.
1. Temukan paket dan skrip yang Anda jalankan
Buka Terminal dan buka folder proyek tempat Anda biasa menjalankan npm. macOS menggunakan zsh secara default di Terminal, meskipun shell Anda dapat diubah. Gunakan pwd untuk menampilkan direktori Anda saat ini, lalu buat daftar file untuk melihat apakah folder tersebut berisi file package.json. Panduan Terminal Apple menjelaskan cara memasukkan perintah di Terminal dan menggunakan alat seperti ls.
pwd
ls
Jika Anda tidak yakin paket mana yang mendefinisikan skrip tersebut, periksa package.json di folder saat ini. Anda dapat menampilkannya dengan cat package.json, atau membukanya di editor teks. Temukan nama skrip di bawah objek scripts. Misalnya, dalam "scripts": { "build": "node build.js" }, nama skrip yang akan dijalankan adalah build. Jangan berasumsi bahwa folder proyek tingkat atas adalah pemilik skrip tersebut jika ini merupakan repositori workspace.
2. Periksa direktori yang diharapkan npm
Untuk versi npm saat ini, skrip berjalan dari root folder paket, terlepas dari direktori tempat Anda memanggil npm run. Dalam proyek standar, itu adalah folder yang berisi package.json milik paket tersebut. Dalam proyek workspace, npm dapat menjalankan skrip dalam konteks workspace yang dipilih; paket workspace itulah yang harus diperiksa. Lihat dokumentasi npm tentang direktori kerja skrip dan menjalankan skrip di workspaces.
Perilaku yang terdokumentasi ini merupakan jawaban awal yang baik, namun jika skrip mengubah direktori secara internal atau Anda perlu mengonfirmasi apa yang dilihat oleh perintah tertentu, cetak jalurnya selama eksekusi. Perintah shell seperti cd di dalam skrip dapat mengubah direktori untuk perintah-perintah setelahnya, sehingga folder paket saja mungkin tidak memberikan gambaran secara menyeluruh.
3. Cetak direktori dari dalam skrip
Pemeriksaan paling jelas adalah dengan menambahkan pwd untuk sementara waktu di awal perintah skrip pada package.json. Misalnya, ubah:
"build": "node build.js"
menjadi:
"build": "pwd && node build.js"
Kemudian jalankan skrip seperti biasa:
npm run build
Jalur yang dicetak sebelum perintah build adalah direktori kerja shell pada saat itu. Diagnostik ini menggunakan &&, sehingga node build.js hanya berjalan jika pwd berhasil. Setelah memeriksa, hapus prefiks diagnostik tersebut dan pulihkan perintah asli. Tinjau file sebelum menyimpan jika skrip asli sudah menggunakan operator shell, tanda kutip, atau perintah pembungkus (wrapper); pertahankan urutan dan sintaks yang dimaksudkan.
Jika skrip tersebut merupakan file Node.js dan Anda dapat mengeditnya, pemeriksaan langsung lainnya adalah dengan menambahkan console.log(process.cwd()) untuk sementara waktu di dekat bagian awalnya. Node mendokumentasikan process.cwd() sebagai direktori kerja saat ini dari proses Node.js. Hal itu melaporkan direktori yang dilihat Node saat baris tersebut dieksekusi; jika program nantinya mengubah direktori kerjanya, nilainya dapat berubah.
4. Baca hasilnya dan perhitungkan workspace
Bandingkan jalur yang dicetak dengan jalur yang ditunjukkan oleh pwd sebelum Anda menjalankan npm. Keduanya mungkin berbeda: direktori skrip npm adalah root paket, sedangkan direktori Terminal Anda adalah tempat Anda meluncurkan perintah. Misalnya, jika Terminal Anda dimulai di root repositori tetapi Anda menjalankan skrip yang ditentukan oleh paket di bawah packages/site, konteks paket skrip tersebut bisa jadi merupakan workspace tersebut. npm mendokumentasikan pemilihan salah satu workspace dengan --workspace; Anda juga dapat menjalankan skrip dari dalam direktori workspace.
npm run build --workspace=site
Gunakan nama workspace atau jalur yang cocok dengan konfigurasi workspaces proyek. Jika hasilnya tidak terduga, konfirmasikan bahwa Anda telah memilih skrip dan workspace yang tepat, lalu periksa apakah skrip itu sendiri berisi cd atau memanggil alat lain yang mengubah direktori. Sebuah child process juga mungkin memiliki pengaturan direktori kerjanya sendiri; periksa konfigurasi alat tersebut jika perilakunya berbeda dari skrip induk.
Apa yang ditunjukkan oleh INIT_CWD
npm menyediakan INIT_CWD untuk direktori tempat Anda berada saat memanggil npm run. Nilai tersebut dapat membantu saat skrip perlu mengetahui dari mana pemanggil memulai, tetapi itu bukanlah direktori kerja skrip saat ini. Gunakan pwd di dalam skrip shell atau process.cwd() di dalam Node.js untuk memeriksa direktori yang dilihat oleh proses yang sedang berjalan. Perbedaan ini sangat berguna ketika jalur file relatif berfungsi dari satu lokasi pemanggilan tetapi tidak dari lokasi lainnya.
Untuk diagnosis cepat, mulailah dengan aturan root paket npm, pilih workspace yang diinginkan jika diperlukan, dan cetak pwd di dalam skrip untuk mengonfirmasi jalur sebenarnya pada titik saat skrip tersebut berjalan.
Sumber
Scripts — npm Docs
Workspaces — npm Docs
Process — Node.js
Execute commands and run tools in Terminal on Mac — Apple Support
Change the default shell in Terminal on Mac — Apple Support