Node dapat menangani symlink dengan baik. Cara mencapainya bergantung pada beberapa tujuan Anda. Yang paling penting adalah: pengalaman apa yang ingin Anda miliki untuk pengembang lain yang mengunduh proyek Anda dari kontrol versi?
Saat merancang pengalaman ini, akan sangat membantu jika membaca tentang algoritme pemuatan modul Node, untuk mendapatkan wawasan tentang apa yang mungkin dilakukan.
Secara umum, rekomendasi saya adalah untuk tidak khawatir dengan duplikasi ketergantungan antar proyek. "Memperbaiki" hal ini tidak sebanding dengan biaya pemeliharaan, yang mencakup kemacetan ketergantungan (konflik kebutuhan subproyek) dan memerlukan alat khusus dalam beberapa kasus untuk memperhitungkan struktur khusus Anda.
Dengan tidak adanya peringatan tersebut, bagaimana kita melakukannya? Cara paling sederhana adalah dengan membuat proyek super yang merangkum berbagai subproyek. Subproyek akan secara efektif mewarisi ketergantungan proyek super.
superproject/
|-- node_modules/
| +-- socket.io/
|-- package.json
|-- subprojectA/
| |-- node_modules/
| | +-- browserify/
| |-- package.json
| +-- app/
| +-- client.js
+-- subprojectB/
|-- node_modules/
| +-- express/
|-- package.json
+-- lib/
+-- server.js
Struktur ini berfungsi seperti yang Anda harapkan, file dalam subproyek dapat require()
modulnya sendiri dan modul apa pun di superproject/node_modules
, tetapi file tersebut tidak akan dengan mudah require()
modul dalam subproyek saudaranya (masih memungkinkan untuk melakukannya melalui jalur eksplisit). Dengan kata lain, client.js dapat require()
melakukan browserify dan socket.io tanpa jalur, tetapi harus menggunakan jalur ke require()
express.
Aspek penting dari hal ini adalah npm
melakukan pencarian "menemukan" untuk package.json dan menangani modul di direktori node_modules
sebagai saudara dari file tersebut saat menginstal, dll. Ini berarti direktori kerja Anda saat ini harus superproject
untuk memasang modul di dalamnya, kecuali subproyek Anda tidak memiliki file package.json
.
person
Seth Holladay
schedule
27.03.2016