Apa cara paling benar untuk menginstal npm packages
di sub folder bersarang?
my-app
/my-sub-module
package.json
package.json
Apa cara terbaik untuk telah packages
di /my-sub-module
diinstal secara otomatis ketika npm install
berjalan di my-app
?
Jawaban:
Jika Anda ingin menjalankan satu perintah untuk menginstal paket npm di subfolder bersarang, Anda dapat menjalankan skrip via
npm
dan mainpackage.json
di direktori root Anda. Skrip akan mengunjungi setiap subdirektori dan berjalannpm install
.Di bawah ini adalah
.js
skrip yang akan mencapai hasil yang diinginkan:Perhatikan bahwa ini adalah contoh yang diambil dari artikel StrongLoop yang secara khusus membahas
node.js
struktur proyek modular (termasuk komponen danpackage.json
file bersarang ).Seperti yang disarankan, Anda juga bisa mendapatkan hal yang sama dengan skrip bash.
EDIT: Membuat kode berfungsi di Windows
sumber
Saya lebih suka menggunakan post-install, jika Anda tahu nama-nama subdirektori bersarang. Masuk
package.json
:sumber
"postinstall": "cd nested_dir2 && npm install"
untuk setiap folder?Sesuai jawaban @ Scott, script install | postinstall adalah cara termudah selama nama sub-direktori diketahui. Ini adalah bagaimana saya menjalankannya untuk beberapa sub dirs. Misalnya, anggap saja kita punya
api/
,web/
danshared/
subproyek di root monorepo:sumber
( )
untuk membuat subkulit dan menghindaricd api && npm install && cd ..
.npm install
di tingkat atas:"(cd was unexpected at this time."
Solusi saya sangat mirip. Node.js murni
Skrip berikut memeriksa semua subfolder (secara rekursif) selama subfolder tersebut memiliki
package.json
dan berjalannpm install
di masing-masing subfolder . Seseorang dapat menambahkan pengecualian padanya: folder tidak boleh memilikipackage.json
. Dalam contoh di bawah ini, salah satu folder tersebut adalah "paket". Seseorang dapat menjalankannya sebagai skrip "prainstal".sumber
Hanya untuk referensi jika orang menemukan pertanyaan ini. Sekarang kamu bisa:
npm install --save path/to/my/subfolder
sumber
mkdir -p a/b ; cd a ; npm init ; cd b ; npm init ; npm install --save through2 ;
Sekarang tunggu ... Anda baru saja menginstal dependensi secara manual di "b", bukan itu yang terjadi saat Anda mengkloning proyek baru.rm -rf node_modules ; cd .. ; npm install --save ./b
. Sekarang daftar node_modules, lalu daftar b.Kasus Penggunaan 1 : Jika Anda ingin dapat menjalankan perintah npm dari dalam setiap subdirektori (di mana setiap package.json berada), Anda perlu menggunakan
postinstall
.Seperti yang sering saya gunakan
npm-run-all
, saya menggunakannya agar tetap bagus dan singkat (bagian dalam postinstall):Ini memiliki manfaat tambahan yang dapat saya instal sekaligus, atau satu per satu. Jika Anda tidak membutuhkan ini atau tidak ingin
npm-run-all
sebagai dependensi, lihat jawaban demisx (menggunakan subkulit di postinstall).Kasus Penggunaan 2 : Jika Anda akan menjalankan semua perintah npm dari direktori root (dan, misalnya, tidak akan menggunakan skrip npm di subdirektori), Anda cukup menginstal setiap subdirektori seperti yang Anda lakukan pada dependecy:
Dalam kasus terakhir, jangan kaget bahwa Anda tidak menemukan
node_modules
ataupackage-lock.json
file apa pun di sub-direktori - semua paket akan diinstal di rootnode_modules
, itulah sebabnya Anda tidak akan dapat menjalankan perintah npm Anda (itu membutuhkan ketergantungan) dari salah satu subdirektori Anda.Jika Anda tidak yakin, use case 1 selalu berhasil.
sumber
run-p
tidak perlu, tapi lebih bertele"postinstall": "npm run install:a && npm run install:b"
&&
tanparun-p
. Tapi seperti yang Anda katakan, itu kurang terbaca. Kelemahan lain (run-p terpecahkan karena pemasangan berjalan paralel) adalah jika salah satu gagal, tidak ada skrip lain yang terpengaruhMenambahkan dukungan Windows ke jawaban snozza , serta melewatkan
node_modules
folder jika ada.sumber
Terinspirasi oleh skrip yang disediakan di sini, saya membuat contoh yang dapat dikonfigurasi yang:
yarn
ataunpm
yarn
tetapi direktori hanya memilikipackage-lock.json
itu akan digunakannpm
untuk direktori itu (default ke true).cp.spawn
yarn workspaces
(dapat dikonfigurasi)Dan dengan itu digunakan:
sumber
Jika Anda memiliki
find
utilitas di sistem Anda, Anda dapat mencoba menjalankan perintah berikut di direktori root aplikasi Anda:find . ! -path "*/node_modules/*" -name "package.json" -execdir npm install \;
Pada dasarnya, temukan semua
package.json
file dan jalankannpm install
di direktori itu, lewati semuanode_modules
direktori.sumber
find . ! -path "*/node_modules/*" ! -path "*/additional_path/*" -name "package.json" -execdir npm install \;