Setiap hari, jutaan pengembang, saat membuat aplikasi JavaScript mereka, beralih ke npm (atau ke Benang). Menjalankan perintah seperti
npm init
atau
npx create-react-app
telah menjadi cara yang biasa untuk mulai bekerja di hampir semua proyek JavaScript. Ini bisa berupa server, klien, atau bahkan aplikasi desktop.
Tetapi utilitas npm tidak hanya mampu menginisialisasi proyek atau menginstal paket. Penulis materi, terjemahan yang kami terbitkan hari ini, ingin berbicara tentang trik 13 npm yang akan memungkinkan Anda untuk memeras segala yang mungkin dari sistem ini. Di sini kita akan mempertimbangkan berbagai teknik ukuran - dari penggunaan cara pintas untuk menyesuaikan perilaku
npm init
.

Banyak programmer menggunakan npm setiap hari. Ini berarti bahwa dalam jangka panjang, bahkan penghematan waktu yang kecil dapat mengubah sesuatu menjadi lebih baik. Materi ini terutama ditujukan untuk pengembang pemula dan pengembang tingkat menengah. Namun, bahkan jika Anda seorang profesional, penulis materi berharap bahwa Anda dapat menemukan beberapa hal menarik di sini yang belum pernah Anda temui sebelumnya.
Jika Anda benar-benar tidak terbiasa dengan npm - perlu diketahui bahwa program yang menarik bagi kami diinstal dengan
Node.js. Jika Anda bekerja pada Windows, Anda disarankan menginstal
Git Bash untuk mereproduksi apa yang sedang dibahas di sini.
1. Opsi singkat untuk merekam perintah dasar
Mari kita mulai dengan dasar-dasarnya. Dengan menghabiskan sedikit waktu menjelajahi versi singkat dari perintah npm yang paling umum, Anda akan menghemat banyak waktu di masa depan.
- Instal paket. Opsi normal:
npm install
. Pintasan: npm i
. - Menjalankan tes. Opsi normal:
npm test
. Pintasan: npm t
. - Telepon bantuan Opsi umum:
npm --help
. Pintasan: npm -h
. - Bendera pengaturan global. Opsi umum:
--global
. Pintasan: -g
. - Paket pemasangan bendera sebagai ketergantungan pengembangan. Opsi yang biasa adalah
--save-dev
. Pintasan: -D
. npm init
awal npm init
. Opsi yang biasa adalah npm init --yes
atau npm init --force
. Pintasan: npm init -y
atau npm init -f
.
Sekarang Anda tidak perlu menggunakan flag
--save
atau
-S
untuk menyimpan paket. Paket disimpan secara default. Dan untuk menginstal paket tanpa menyimpannya, Anda dapat menggunakan
--no-save
.
โPilihan perekaman pendek untuk perintah yang kurang umum
Berikut adalah beberapa singkatan yang lebih berguna, yang, bagaimanapun, tidak digunakan seluas yang kami tinjau.
- Menyimpan paket sebagai ketergantungan opsional. Opsi yang biasa:
--save-optional
. Pintasan: -O
. - Menyimpan informasi tentang versi persis paket. Opsi yang biasa adalah
--save-exact
. Pintasan: -E
.
Menggunakan perintah
npm install
dengan
npm install
--save-bundle
, atau
-B
bundledDependencies
menyebabkan entri dalam bundel yang diinstal muncul di
package.json
, di bagian
bundledDependencies
. Paket-paket ini akan dikemas dengan proyek setelah publikasi. Untuk membuat file tarball yang berisi file proyek dan paket yang terdaftar di
bundledDependencies
, Anda dapat menggunakan perintah
npm pack
.
โ Singkatan untuk direktori root
Biasanya, simbol titik (
.
) Digunakan untuk merepresentasikan direktori root dari suatu aplikasi, atau (tergantung pada konteksnya) untuk mewakili titik masuk ke suatu aplikasi. Dalam npm, ini adalah apa yang ditetapkan sebagai nilai properti
main
dalam file
package.json
:
{ "main": "index.js" }
Steno ini dapat digunakan, misalnya, dengan perintah seperti
npx create-react-app
. Jadi, alih-alih menjalankan perintah ini dalam bentuk
npx create-react-app my-app
(yang akan mengarah pada pembuatan folder
my-app
), Anda dapat menjalankan perintah ini seperti ini:
npx create-react-app .
(perhatikan titik yang datang setelah perintah). Ini akan memungkinkan Anda untuk membuat proyek template aplikasi Bereaksi di folder di mana Anda berada saat perintah dijalankan.
2. Menetapkan nilai default untuk npm init
Dengan terus-menerus menjalankan perintah
npm init
untuk membuat proyek baru, Anda kemungkinan besar akan menemukan bahwa Anda memasukkan data yang sama berulang-ulang sebagai respons terhadap pertanyaan sistem. Misalnya - kemungkinan Anda adalah penulis sebagian besar proyek yang Anda buat. Untuk menghemat waktu dalam memasukkan data yang sama, Anda dapat menetapkan nilai default Anda sendiri untuk bidang yang sesuai:
npm config set init.author.name "Joe Bloggs" npm config set init.author.email "joebloggs@gmail.com" npm config set init.author.url "joebloggs.com" npm config set init.license "MIT"
Untuk memverifikasi kebenaran menambahkan informasi tersebut ke sistem, masukkan perintah
npm config edit
. Ini akan membuka file konfigurasi di editor sistem. Jika Anda ingin mengedit parameter global npm, gunakan perintah
npm config edit -g
.
Untuk kembali ke pengaturan default, Anda dapat menggunakan skrip berikut. Baris pertama menghapus data konfigurasi dari file, dan yang kedua mengisinya dengan nilai default.
echo "" > $(npm config get userconfig) npm config edit
Skrip di atas mengatur ulang nilai default untuk pengguna. Skrip berikut ini akan menyetel ulang default global:
echo "" > $(npm config get globalconfig) npm config --global edit
3. Skrip lintas platform
Kode apa pun yang dijalankan pada baris perintah dapat mengalami masalah kompatibilitas. Ini terutama berlaku untuk ketidakcocokan antara sistem berbasis Windows dan Unix (ini termasuk Mac dan Linux). Ini bukan masalah jika Anda dan hanya Anda yang mengerjakan proyek tertentu. Tetapi dalam banyak kasus, kompatibilitas skrip lintas platform sangat penting. Sebagai contoh, bekerja secara independen dari sistem operasi adalah nilai tambah yang besar untuk proyek open source, pelatihan atau demonstrasi.
Untungnya, menyelesaikan masalah kompatibilitas skrip tidak terlalu sulit. Kami memiliki beberapa opsi. Namun, di sini saya ingin berbicara tentang salah satunya, tentang penggunaan yang mana saya mendapatkan hasil terbaik. Ini adalah paket
lintas-env . Itu harus diinstal sebagai dependensi pengembangan menggunakan perintah
npm i -D cross-env
. Maka Anda perlu meletakkan
cross-env
di depan setiap variabel lingkungan. Misalnya, mungkin terlihat seperti ini:
{ "scripts": { "build": "cross-env NODE_ENV=production webpack --config build/webpack.config.js" }
Saya menemukan bahwa paket
cross-env
adalah alat yang paling nyaman untuk mencapai kompatibilitas skrip lintas platform. Tetapi akan berguna bagi Anda untuk melihat dua alat populer berikut yang dapat membantu dalam memecahkan masalah ini:
- Paket Rimraf . Itu, untuk menjalankan skrip lintas-platform, dapat diinstal secara global.
- Paket ShellJS . Ini adalah implementasi Node.js portabel dari shell perintah Unix.
4. Eksekusi skrip paralel
Untuk mengatur eksekusi berurutan dari perintah di shell Linux,
&&
construct digunakan. Bagaimana dengan menjalankan skrip paralel? Untuk mencapai ini, Anda dapat memilih paket npm yang sesuai. Paket yang paling populer dari jenis ini adalah
bersamaan dan
npm-run-all . Di sini kami mendemonstrasikan penggunaan paket secara bersamaan.
Pertama, paket yang dipilih harus diinstal sebagai dependensi pengembangan:
npm i -D concurrently
. Kemudian di
package.json
Anda dapat menggunakan konstruksi dari formulir berikut:
{ "start": "concurrently \"command1 arg\" \"command2 arg\"" }
5. Menjalankan skrip yang terletak di berbagai direktori
Terkadang Anda menemukan aplikasi yang memiliki beberapa file
package.json
terletak di direktori yang berbeda. Akan lebih mudah, misalnya, untuk menjalankan skrip yang dideklarasikan di dalamnya, berada di direktori root proyek. Ini jauh lebih baik daripada harus melakukan perjalanan ke folder yang berbeda setiap kali Anda perlu menjalankan skrip. Untuk melakukan ini, Anda dapat menggunakan dua pendekatan berikut.
Untuk memulai, Anda dapat menggunakan
cd
untuk secara otomatis menavigasi ke direktori yang diinginkan. Mungkin terlihat seperti ini:
cd folder && npm start && cd ..
Namun masalah ini bisa diselesaikan dengan cara yang lebih menarik. Terdiri dari menggunakan flag
--prefix
, yang dengannya Anda dapat menentukan path:
npm start --prefix path/to/your/folder
Berikut ini adalah contoh penerapan solusi ini dari aplikasi nyata. Di sini kita perlu menjalankan
npm start
untuk bagian klien dan server proyek. Kode mereka, masing-masing, terletak di folder
client
dan
server
.
"start": "concurrently \"(npm start --prefix client)\" \"(npm start --prefix server)\"",
6. Menunda peluncuran skrip hingga sumber daya tersedia
Ketika mengembangkan aplikasi tumpukan penuh, sering kali perlu untuk menjalankan bagian klien dan server dari aplikasi tersebut. Paket
tunggu memungkinkan Anda untuk menyinkronkan pelaksanaan proses tertentu. Dalam kasus kami, perlu bahwa sebelum memulai bagian klien dari aplikasi, port tertentu harus tersedia.
Misalnya, ada skrip dev yang digunakan dalam aplikasi Elektron yang antarmuka ditulis menggunakan React. Script, menggunakan
concurrently
, menjalankan lapisan presentasi aplikasi dan jendela Elektron secara paralel. Tetapi menggunakan
wait-on
Anda dapat membuat jendela Electron terbuka hanya ketika layer presentasi Bereaksi siap digunakan dan tersedia di
http://localhost:3000
. Seperti apa tampilan
wait-on
:
"dev": "concurrently \"cross-env BROWSER=none npm run start\" \"wait-on http://localhost:3000 && electron .\"",
Selain itu, perilaku standar proyek Bereaksi adalah membuka jendela browser secara otomatis. Jika menggunakan Bereaksi dengan Elektron, ini tidak perlu. Ini dapat
BROWSER=none
menggunakan
BROWSER=none
variabel lingkungan, sebelum itu, demi kompatibilitas lintas platform dari solusi, ada perintah
cross-env
.
7. Mendaftar dan bekerja dengan skrip yang tersedia
Untuk membuat daftar skrip yang tersedia di
package.json
, cukup buka direktori root proyek dan jalankan perintah
npm run
di terminal.
Tetapi ada cara yang bahkan lebih mudah untuk membuat daftar skrip. Saat menggunakannya, skrip yang diinginkan dapat langsung dipilih dari daftar dan jalankan. Untuk menggunakan cara ini bekerja dengan skrip, kita perlu menginstal modul
ntl
(Npm Task List) secara global:
npm i -g ntl
Kemudian di folder proyek Anda perlu menjalankan perintah
ntl
. Ini akan menampilkan daftar skrip yang tersedia dan akan memberi Anda kesempatan untuk memilih skrip untuk dijalankan. Ini tampilannya.
Menggunakan perintah ntlFitur ini bisa sangat berguna jika Anda tidak tahu persis skrip apa yang ada dalam proyek. Ini juga baik dalam kasus di mana programmer ingin mengganti input dari perintah panjang untuk menjalankan skrip dengan input dari perintah pendek dan penekanan cepat dari beberapa tombol lagi pada keyboard.
8. Menjalankan pra-skrip dan post-skrip
Anda mungkin terbiasa dengan skrip
postbuild
dan
postbuild
yang memungkinkan Anda untuk menjalankan beberapa kode sebelum dan sesudah menjalankan skrip
build
. Skrip pra dan pasca dapat didefinisikan untuk skrip lainnya. Termasuk mereka yang uraiannya ditambahkan ke p
ackage.json
oleh programmer.
Ini tidak hanya memungkinkan Anda untuk membuat kode lebih bersih, tetapi juga membantu untuk menjalankan skrip pra dan pasca secara terpisah.
9. Kontrol versi aplikasi
Alih-alih mengubah versi aplikasi secara manual, programmer dapat menggunakan perintah
npm
khusus. Untuk meningkatkan bagian yang sesuai dari nomor versi aplikasi, Anda dapat menggunakan perintah
npm version
diikuti oleh
major
,
minor
atau
patch
:
// 1.0.0 npm version patch // 1.0.1 npm version minor // 1.1.0 npm version major // 2.0.0
Bergantung pada seberapa sering Anda memperbarui aplikasi, Anda dapat menghemat waktu dengan secara otomatis menambah nomor versi setiap kali Anda menggunakan versi baru aplikasi. Misalnya, seperti ini:
{ "predeploy": "npm version patch" }
10. Mengedit package.json dari baris perintah
File package.json adalah file json biasa, sehingga dapat diedit langsung dari baris perintah menggunakan utilitas
json . Ini membuka kemungkinan baru dalam situasi di mana Anda perlu memodifikasi
package.json
, memungkinkan Anda untuk membuat versi perintah yang dipersingkat. Instal paket
json
secara global:
npm install -g json
Kemudian utilitas
json
dapat digunakan untuk
mengedit file dengan cepat menggunakan
-I
. Misalnya, untuk menambahkan skrip
foo
baru dengan
bar
nilai ke file, Anda dapat menggunakan perintah berikut:
json -I -f package.json -e 'this.scripts.foo="bar"'
Di bagian selanjutnya, Anda akan melihat contoh yang lebih praktis menggunakan utilitas
json
.
11. Otomatisasi pengaturan dan pembukaan repositori
Jika ada entri
"repository"
di file
package.json
Anda, ini berarti Anda dapat membuka halaman repositori di browser yang digunakan oleh sistem secara default. Untuk melakukan ini, gunakan perintah
npm repo
.
Jika proyek Anda sudah terhubung ke repositori jarak jauh dan Anda telah menginstal utilitas baris perintah
git
, ini berarti Anda bisa mengetahui alamat repositori Anda menggunakan perintah berikut:
git config --get remote.origin.url
Tapi itu belum semuanya. Jika, sesuai dengan tip sebelumnya, Anda menginstal utilitas
json
, maka Anda dapat menggunakan skrip berikut untuk secara otomatis menambahkan informasi repositori yang benar ke
package.json
:
json -I -f package.json -e "this.repository=\"$(git config --get remote.origin.url)\""
12. Membuat skrip Anda sendiri untuk mengontrol perintah npm init
Sekarang mari kita bicara tentang menyelesaikan tugas yang lebih besar. Yaitu, kami akan mengembangkan skrip kami sendiri yang mengontrol operasi perintah
npm init
, yang menerima URL repositori GitHub dan secara otomatis mengirimkan komit pertama ke sana. Di sini kita berbicara tentang cara membuat skrip seperti itu. Dan di bagian selanjutnya, yang akan menjadi tip terakhir kami, kami akan berbicara tentang bekerja dengan
git
.
Anda dapat menyesuaikan perilaku perintah
npm init
menggunakan file
.npm-init.js
. Mari kita buat file seperti itu di direktori home pengguna saat ini (pada Windows biasanya
C:/Users/<username>
, dan pada Mac itu adalah
/Users/<username>
). Setelah itu, jalankan perintah berikut yang memberi tahu npm di mana tepatnya file ini berada:
npm config set init-module ~\.npm-init.js
Sebelum melakukan integrasi dengan c
git
, mari kita lihat contoh sederhana dari file
.npm-init.js
, yang mereproduksi pertanyaan yang diajukan sistem kepada pengguna saat menggunakan perintah
npm init
tanpa pengaturan tambahan:
module.exports = { name: prompt('package name', basename || package.name), version: prompt('version', '0.0.0'), decription: prompt('description', ''), main: prompt('entry point', 'index.js'), repository: prompt('git repository', ''), keywords: prompt(function (s) { return s.split(/\s+/) }), author: prompt('author', 'Joe Bloggs <joe.bloggs@gmail.com> (joebloggs.com)'), license: prompt('license', 'ISC') }
Setiap pertanyaan didasarkan pada templat berikut:
nameInPackage: prompt('nameInPrompt', 'defaultValue')
Untuk menunjukkan nilai tertentu dan tidak mengajukan pertanyaan kepada pengguna, cukup hapus metode
prompt
.
Jika Anda ingin kembali ke pengaturan standar
npm init
, cukup hapus file
.npm-init.js
.
13. Mengirim komit pertama ke repositori GitHub menggunakan npm init
Untuk menjalankan perintah
git
dalam file
.npm-init.js
kita perlu menemukan cara untuk bekerja dengan baris perintah. Anda dapat menggunakan modul
child_process
untuk
child_process
. Kami menyambungkannya di bagian atas file, dan karena kami hanya membutuhkan fungsi
execSync
, kami hanya mengimpornya, menggunakan penghancuran:
const { execSync } = require('child_process');
Selain itu, kami akan membuat fungsi pembantu yang menampilkan hasil fungsi kami di konsol:
function run(func) { console.log(execSync(func).toString()) }
Dan akhirnya, mari kita buat blok prompt yang sesuai untuk menangani URL repositori GitHub. Jika skrip memiliki URL, kami akan membuat file
README.md
dan mengirimkan komit pertama ke repositori.
Jadi, salah satu elemen objek
module.exports
dari file
.npm-init.js
harus berupa kode berikut:
repository: prompt('github repository url', '', function (url) { if (url) { run('touch README.md'); run('git init'); run('git add README.md'); run('git commit -m "first commit"'); run(`git remote add origin ${url}`); run('git push -u origin master'); return url; })
Berikut adalah bagaimana kode lengkap untuk file
.npm-init.js
akan terlihat setelah penambahan ini:
const { execSync } = require('child_process'); function run(func) { console.log(execSync(func).toString()) } module.exports = { name: prompt('package name', basename || package.name), version: prompt('version', '0.0.0'), decription: prompt('description', ''), main: prompt('entry point', 'index.js'), keywords: prompt(function (s) { return s.split(/\s+/) }), author: prompt('author', 'Joe Bloggs <joe.bloggs@gmail.com> (joebloggs.com)'), license: prompt('license', 'ISC'), repository: prompt('github repository url', '', function (url) { if (url) { run('touch README.md'); run('git init'); run('git add README.md'); run('git commit -m "first commit"'); run(`git remote add origin ${url}`); run('git push -u origin master'); return url; }), }
Ini adalah file
package.json
yang dibuat oleh sistem menggunakan
.npm-init.js
:
{ "name": "Custom npm init", "version": "0.0.0", "decription": "A test project, to demonstrate a custom npm init script.", "main": "index.js", "keywords": [], "author": "Joe Bloggs <joe.bloggs@gmail.com> (joebloggs.com)", "license": "ISC", "repository": { "type": "git", "url": "git+https://github.com/JoeBloggs/custom.git" }, "bugs": { "url": "https://github.com/JoeBloggs/custom/issues" }, "homepage": "https://github.com/JoeBloggs/custom#readme" }
Dengan mengatur proses inisialisasi proyek baru, Anda dapat melangkah lebih jauh. Misalnya, untuk memastikan bahwa saat membuat proyek, repositori baru untuknya akan dibuat.
Ringkasan
Saya harap materi ini telah membantu Anda melihat apa yang dapat Anda capai dengan npm. Saya ingin percaya bahwa Anda telah menemukan sesuatu di sini yang akan memungkinkan Anda bekerja lebih produktif - apakah kita berbicara tentang menggunakan versi perintah yang diperpendek, tentang skrip dari
package.json
, atau tentang pengaturan
npm init
agar sesuai dengan kebutuhan Anda.
Pembaca yang budiman! Apakah Anda mengotomatisasi kerja dengan npm?
