Saya menggunakan TypeScript 2 di proyek saya. Saya ingin menggunakan beberapa perpustakaan js, tetapi juga mengetik untuk perpustakaan itu. Saya dapat menginstal jenis dengan sederhana npm install @types/some-library
. Saya tidak yakin apakah saya harus --save
atau --save-dev
mereka. Tampaknya bagi saya bahwa bahkan GitHub DefinetelyTyped membaca saya jenis menyebutkan kedua versi, tetapi tidak pernah menjelaskannya. Saya akan berpikir bahwa @types harus dalam devDependencies
, karena jenis diperlukan untuk pengembangan dan tidak digunakan dalam runtime, tapi saya melihat berkali-kali @types hanya dalam dependencies
. Saya bingung.
Bagaimana saya harus memutuskan apakah @ types / * masuk ke dependencies
atau devDependencies
? Apakah sebenarnya ada lebih atau kurang instruksi resmi?
dependencies
dandevDependencies
dalam kasus terakhir.devDependencies
dandependencies
tidak relevan ketika membangun bundel, sesuatu yangcreate-react-app
memaksa juga tapi akhirnya itu terserah Anda untuk memilihJawaban:
Katakanlah Anda sedang mengembangkan paket "A" yang memiliki paket @ types / some-module di devDependencies. Untuk beberapa alasan Anda mengekspor tipe dari @ types / some-module
Saat ini, konsumen "Script" pada paket "A" tidak dapat menebak apa SomeType itu, karena devDependensi paket "A" TIDAK diinstal.
Dalam kasus tertentu Anda PERLU menempatkan paket @ types / * dengan "dependensi" reguler. Untuk kasus lain, "dependensi" cukup baik.
sumber
devDependencies
?dependencies
. Kalau tidak,devDependencies
tidak apadependencies
akan membuat pohon ketergantungan kembung.Jika Anda hanya membuat bundel, mungkin tidak perlu membedakan antara
dependencies
dandevDependencies
. Fiturnpm
ini umumnya berguna ketika menerbitkan paket yang dapat digunakan oleh orang lain dan Anda tidak ingin mengirim spam dengan dependensi yang berlebihan.Mungkin ada kasus penggunaan lain di mana dependensi pemisahan dapat membantu tetapi kecuali jika Anda memiliki kebutuhan yang jelas untuk ini, maka saran saya adalah hanya memilih salah satu dan meletakkan semuanya di sana. Tidak sulit untuk memisahkan mereka setelah itu jika perlu.
Contoh yang terkenal dari praktik ini IRL adalah
create-react-app
, secara default boiler yang tidak terlontar menciptakan tempat segalanyadependencies
, lihat utas ini dan jawaban inisumber
devDependencies
tidak diinstal ketika Anda melakukannyanpm install --production
(ataunpm ci --production
) dan karenanya tidak tersedia saat menjalankan kode produksi. Ini adalah perbedaan yang sangat berarti untuk layanan, bukan hanya perpustakaan.Dalam kasus khusus penerapan aplikasi Node.js untuk produksi, seseorang hanya ingin menginstal dependensi yang diperlukan untuk menjalankan aplikasi.
npm install --production
ataunpm ci --production
atauyarn --production
Dalam hal ini, jenisnya harus di dalam
devDependencies
, agar tidak kembung pemasangan.Catatan: Saya tahu ini disebutkan dalam komentar Brad Wilson untuk jawaban lain. Namun, poin ini layak menjadi jawaban.
sumber