Selamat siang teman!
Saya terus memposting terjemahan tutorial Node.js ini .
Bagian lain:
Bagian 1
Bagian 2
Bagian 3
Bagian 4
Mendapatkan data yang dimasukkan pengguna di Node.js
Bagaimana cara membuat program Node.js interaktif?
Untuk melakukan ini, versi 7 dari Node.js memperkenalkan modul readline : ini berfungsi untuk mendapatkan data dari aliran untuk dibaca, seperti
process.stdin
baris perintah selama pelaksanaan program Node.js.
const readline = require('readline').createInterface({
input: process.stdin,
output: process.stdout
})
readline.question(`What is your name?`, name => {
console.log(`Hi ${name}!`)
readline.close()
})
Kode ini menanyakan nama pengguna, setelah pengguna mengetik dan mengklik
enter
, sebuah salam ditampilkan.
Metode ini
question()
mencetak parameter pertama (pertanyaan) ke konsol dan menunggu respons pengguna. Saat ditekan enter
, fungsi panggilan balik dijalankan.
Dalam panggilan balik ini, kami menutup antarmuka
readline
.
readline
berisi metode lain, yang dapat Anda baca dalam dokumentasi.
Jika Anda perlu meminta kata sandi, yang terbaik adalah tidak mengembalikannya secara eksplisit, melainkan menggunakan simbol
*
.
Salah satu cara untuk melakukan ini adalah dengan menggunakan paket readline-sync , yang mudah dimengerti dan mudah dikonfigurasi.
Solusi yang lebih lengkap dan abstrak disediakan oleh paket Inquirer.js .
Kami menginstalnya dengan bantuan
npm install inquirer
dan menggunakannya sebagai berikut:
const inquirer = require('inquirer')
const questions = [
{
type: 'input',
name: 'name',
message: `What's your name?`
}
]
inquirer.prompt(questions).then(answers => {
console.log(`Hi ${answers['name']}!`)
})
Inquirer.js memungkinkan Anda melakukan banyak hal keren, seperti menyarankan beberapa pilihan, menyediakan tombol radio, meminta konfirmasi, dll.
Ini lebih dikenal sebagai alternatif untuk solusi bawaan, tetapi jika Anda berencana untuk membawa pengalaman pengguna ke tingkat berikutnya, Inquirer.js adalah solusi terbaik.
Memperluas Fungsi File Node.js Menggunakan Ekspor
Node.js memiliki sistem modular bawaan.
File Node.js dapat mengimpor fungsionalitas dari file Node.js lainnya.
Ketika Anda ingin mengimpor sesuatu yang Anda gunakan
const library = require('./library')
untuk mengimpor fungsi yang diekspor dalam file yang
library.js
terletak di direktori saat ini.
Dalam file ini, fungsionalitas harus diekspor sebelum dapat diimpor dalam file lain.
Objek atau variabel lain apa pun yang ditentukan dalam file secara default privat (pribadi) dan tidak dapat digunakan dalam file lain.
Inilah yang antarmuka yang
module.exports
disediakan oleh sistem modular memungkinkan kita untuk melakukannya .
Saat Anda menetapkan objek atau fungsi sebagai properti baru objek
exports
, Anda mengekspornya, dan kemudian mereka dapat diimpor di tempat lain di aplikasi atau di aplikasi lain.
Ini bisa dilakukan dengan dua cara.
Cara pertama adalah menetapkan nilai
module.exports
, yang merupakan objek default yang disediakan oleh sistem modular. Metode ini memungkinkan Anda untuk hanya mengekspor objek ini:
const car = {
brand: 'Ford',
model: 'Fiesta'
}
module.exports = car
//
const car = require('./car')
Cara kedua adalah menambahkan objek yang diekspor sebagai properti objek
exports
. Metode ini memungkinkan Anda untuk mengekspor banyak objek, fungsi, atau data:
const car = {
brand: 'Ford',
model: 'Fiesta'
}
exports.car = car
atau lebih
exports.car = {
brand: 'Ford',
model: 'Fiesta'
}
Untuk menggunakan objek ini di file lain, Anda harus membuat tautan ke impor:
const items = require('./items')
items.car
atau
const car = require('./items').car
Apa perbedaan antara
module.exports
dan exports
?
Yang pertama mengekspor objek yang direferensikan, yang kedua properti dari objek.
Pengantar manajer paket npm
Pengantar npm
npm
Apakah manajer paket Node.js default.
Pada Januari 2017, npm memiliki lebih dari 350.000 paket, menjadikannya repositori kode terbesar dalam satu bahasa pemrograman di Bumi, dan Anda dapat yakin bahwa ada paket untuk apa saja.
Semuanya dimulai dengan mengunduh dan mengelola dependensi di Node.js, tetapi tak lama kemudian alat ini mulai digunakan secara aktif dalam pengembangan sisi aplikasi klien.
npm
melakukan beberapa hal.
Alternatif untuk npm adalah benang .
Memuat
npm
mengelola pemuatan dependensi proyek.
Jika ada file dalam proyek,
package.json
peluncuran npm install
akan menginstal semua yang diperlukan proyek ke direktori node_modules
yang dibuat jika tidak ada.
Paket tertentu dapat diinstal menggunakan
npm install <package-name>
.
Seringkali instalasi paket disertai dengan bendera:
- --save - instal paket dan tambahkan entri tentangnya ke bagian dependensi file
package.json
- --save-dev - instal paket dan tambahkan entri tentangnya ke bagian devDependencies pada file
package.json
Perbedaan utama adalah bahwa dependensi devDigunakan untuk tujuan pengembangan, misalnya, untuk pengujian, dan dependensi digunakan dalam produksi (saat membangun proyek).
Memperbarui paket
Memperbarui dengan mudah
npm update
.
npm
akan memeriksa semua paket untuk versi baru yang memenuhi batasan yang ditetapkan.
Anda juga dapat memperbarui paket tertentu:
npm update <package-name>
.
Versi
Selain unduhan standar, npm mendukung versi, sehingga Anda dapat menentukan versi spesifik suatu paket, atau meminta versi yang lebih baru atau lebih lama.
Anda akan sering menemukan bahwa satu perpustakaan hanya kompatibel dengan versi tertentu (utama) dari perpustakaan lain.
Dan juga dengan bug dari rilis terbaru yang belum diperbaiki untuk waktu yang lama.
Pembuatan versi juga membantu pengembangan tim karena setiap anggota tim tahu versi mana yang digunakan sebelum memperbarui file
package.json
.
Dalam semua kasus ini, versi membantu, dalam hal ini,
npm
mengikuti standar yang diterima.
Menjalankan tugas
package.json
mendukung format untuk menentukan perintah yang akan dieksekusi di terminal dengan npm run <task-name>
.
Sebagai contoh:
{
"scripts": {
"start-dev": "node lib/server-development",
"start": "node lib/server-production"
},
}
Ini adalah praktik umum untuk menggunakan kemampuan ini untuk menjalankan Webpack:
{
"scripts": {
"watch": "webpack --watch --progress --colors --config webpack.conf.js",
"dev": "webpack --progress --colors --config webpack.conf.js",
"prod": "NODE_ENV=production webpack -p --config webpack.conf.js"
},
}
Ini memungkinkan, alih-alih serangkaian perintah panjang yang mudah dilupakan atau yang mudah dibuat kesalahan, untuk melakukan ini:
npm run watch
npm run dev
npm run prod
Di mana npm menginstal paket?
Saat menginstal paket menggunakan,
npm
Anda dapat memilih antara dua jenis instalasi:
- lokal
- global
Secara default, ketika Anda memasukkan
npm install
misalnya:
npm install lodash
paket diinstal ke folder
node_modules
di direktori saat ini.
Setelah instalasi
npm
menambahkan catatan lodash
ke bagian dependencies
file package.json
di direktori saat ini.
Untuk instalasi global, gunakan bendera
-g
:
npm install -g lodash
Dalam instalasi global, paket diinstal bukan di direktori saat ini, tetapi di global.
Tapi dimana tepatnya?
Untuk menentukan ini, Anda perlu menjalankan perintah
npm root -g
.
Di macOS atau Linux, direktori ini bisa
/usr/local/lib/node_modules
. Di Windows - C:\Users\YOU\AppData\Roaming\npm\node_modules
. Direktori ini mungkin berbeda
ketika digunakan
nvm
untuk versi Node.js.
Bagaimana cara menggunakan paket yang diinstal?
Cara menggunakan
node_modules
paket yang dipasang di folder atau secara global.
Katakanlah Anda menginstal
lodash
pustaka pembantu JavaScript populer npm install lodash
.
Perintah ini akan dipasang
lodash
ke direktori lokal node_modules
.
Untuk menggunakan program ini, Anda perlu mengimpor paket menggunakan
require
:
const _ = require('lodash')
Bagaimana jika paket dapat dieksekusi (file)?
Dalam hal ini, file yang dapat dieksekusi akan ditempatkan di direktori
node_modules/.bin/
.
Ini dapat dengan mudah diperagakan menggunakan pustaka cowsay .
Paket ini menyediakan program baris perintah, ketika dieksekusi, sapi (dan hewan lainnya) "berbicara" sesuatu.
Saat memasang paket melalui
npm install cowsay
, paket itu sendiri dan beberapa dependensinya akan diinstal:
Folder
.bin
disembunyikan dan berisi tautan simbolis ke cowsay data biner:
Bagaimana cara menjalankannya?
Anda tentu saja dapat mengetik
./node_modules/.bin/cowsay
dan itu harus bekerja, tetapi npx yang disertakan dengan npm (karena 5.2) adalah pilihan terbaik. Anda lakukan sajanpx cowsay
dan npx akan mencari file secara otomatis:
Sapi itu berkata "bawa aku keluar dari sini."
Paket.json manual
Saat bekerja dengan JavaScript, saat berinteraksi dengan proyek JavaScript, Node.js, atau aplikasi front-end, Anda mungkin akan menjumpai a
package.json
.
Apa itu? Apa yang harus Anda ketahui tentang dia? Dan apa yang dapat Anda lakukan dengannya?
package.json
Adalah semacam manifesto proyek. Dia dapat melakukan banyak hal yang sama sekali tidak berhubungan satu sama lain. Misalnya, itu bisa menjadi file utama untuk pengaturan alat yang digunakan. Ini juga menyimpan nama dan versi semua paket yang diinstal (informasi ini digunakan npm
dan yarn
).
Struktur file
Ini sebuah contoh
package.json
:
{}
Seperti yang Anda lihat, itu kosong. Tidak
package.json
ada persyaratan untuk konten . Satu-satunya persyaratan adalah formatnya (JSON), jika tidak, program tidak akan dapat mengaksesnya.
Jika Anda membuat paket Node.js yang ingin Anda bagikan
npm
, situasinya berubah secara dramatis dan Anda perlu menambahkan properti untuk membantu orang lain menggunakan paket tersebut. Kami akan melihat ini nanti.
Ini contoh lain
package.json
:
"name": "test-project"
Di sini kita telah mendefinisikan nama paket atau aplikasi yang terletak di direktori yang sama dengan
package.json
.
Berikut adalah contoh yang lebih kompleks yang
package.json
dipinjam dari aplikasi Vue.js:
{
"name": "test-project",
"version": "1.0.0",
"description": "A Vue.js project",
"main": "src/main.js",
"private": true,
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"unit": "jest --config test/unit/jest.conf.js --coverage",
"test": "npm run unit",
"lint": "eslint --ext .js,.vue src test/unit",
"build": "node build/build.js"
},
"dependencies": {
"vue": "^2.5.2"
},
"devDependencies": {
"autoprefixer": "^7.1.2",
"babel-core": "^6.22.1",
"babel-eslint": "^8.2.1",
"babel-helper-vue-jsx-merge-props": "^2.0.3",
"babel-jest": "^21.0.2",
"babel-loader": "^7.1.1",
"babel-plugin-dynamic-import-node": "^1.2.0",
"babel-plugin-syntax-jsx": "^6.18.0",
"babel-plugin-transform-es2015-modules-commonjs": "^6.26.0",
"babel-plugin-transform-runtime": "^6.22.0",
"babel-plugin-transform-vue-jsx": "^3.5.0",
"babel-preset-env": "^1.3.2",
"babel-preset-stage-2": "^6.22.0",
"chalk": "^2.0.1",
"copy-webpack-plugin": "^4.0.1",
"css-loader": "^0.28.0",
"eslint": "^4.15.0",
"eslint-config-airbnb-base": "^11.3.0",
"eslint-friendly-formatter": "^3.0.0",
"eslint-import-resolver-webpack": "^0.8.3",
"eslint-loader": "^1.7.1",
"eslint-plugin-import": "^2.7.0",
"eslint-plugin-vue": "^4.0.0",
"extract-text-webpack-plugin": "^3.0.0",
"file-loader": "^1.1.4",
"friendly-errors-webpack-plugin": "^1.6.1",
"html-webpack-plugin": "^2.30.1",
"jest": "^22.0.4",
"jest-serializer-vue": "^0.3.0",
"node-notifier": "^5.1.2",
"optimize-css-assets-webpack-plugin": "^3.2.0",
"ora": "^1.2.0",
"portfinder": "^1.0.13",
"postcss-import": "^11.0.0",
"postcss-loader": "^2.0.8",
"postcss-url": "^7.2.1",
"rimraf": "^2.6.0",
"semver": "^5.3.0",
"shelljs": "^0.7.6",
"uglifyjs-webpack-plugin": "^1.1.1",
"url-loader": "^0.5.8",
"vue-jest": "^1.0.2",
"vue-loader": "^13.3.0",
"vue-style-loader": "^3.0.1",
"vue-template-compiler": "^2.5.2",
"webpack": "^3.6.0",
"webpack-bundle-analyzer": "^2.9.0",
"webpack-dev-server": "^2.9.1",
"webpack-merge": "^4.1.0"
},
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
},
"browserslist": ["> 1%", "last 2 versions", "not ie <= 8"]
}
Ada banyak hal di sini:
name
- nama aplikasi / paketversion
- versi aplikasi / paketdescription
- deskripsi singkat tentang aplikasi / paketmain
- file utama (titik masuk) aplikasiprivate
- nilaitrue
mencegah publikasi aplikasi secara tidak disengajanpm
scripts
- satu set skrip (perintah) yang dapat dijalankan (dieksekusi)dependencies
- Ketergantungan proyekdevDependencies
- Ketergantungan proyek hanya digunakan selama pengembanganengines
- versi aplikasi / paket sedang berjalanbrowserlist
- browser yang didukung (dan versinya)
Semua properti ini digunakan
npm
.
Properti
Di bagian ini, kita akan berbicara tentang beberapa properti yang dapat Anda gunakan. Kami akan menggunakan istilah "paket", tetapi sebagian besar dari apa yang telah dikatakan juga berlaku untuk aplikasi.
Sebagian besar properti diperlukan untuk menerbitkan paket
npm
, beberapa berinteraksi dengan paket.
Nama (nama)
Menentukan nama paket.
Sebagai contoh:
"name": "test-project"
Nama tidak boleh melebihi 214 karakter, tidak boleh mengandung spasi, dan hanya boleh terdiri dari huruf kecil (huruf kecil), tanda hubung (-), dan garis bawah (_).
Ini karena
npm
URL ditetapkan untuk paket ketika itu diterbitkan berdasarkan namanya.
Jika paket dipublikasikan di GitHub, adalah praktik yang baik untuk menautkan ke repositori.
Penulis
Identifikasi pembuat paket.
Sebagai contoh:
{
"author": "Joe <joe@whatever.com> (https://whatever.com)"
}
atau seperti ini:
{
"author": {
"name": "Joe",
"email": "joe@whatever.com",
"url": "https://whatever.com"
}
}
Kontributor
Menentukan satu atau lebih kontributor pada paket. Properti ini adalah serangkaian string.
Sebagai contoh:
{
"contributors": ["Joe <joe@whatever.com> (https://whatever.com)"]
}
atau seperti ini:
{
"contributors": [
{
"name": "Joe",
"email": "joe@whatever.com",
"url": "https://whatever.com"
}
]
}
Kesalahan
Menentukan tautan ke pelacak masalah, biasanya pelacak masalah di GitHub.
Sebagai contoh:
{
"bugs": "https://github.com/whatever/package/issues"
}
Beranda
Menentukan alamat beranda.
Sebagai contoh:
{
"homepage": "https://whatever.com/package"
}
Versi: kapan
Menentukan versi paket saat ini.
Sebagai contoh:
"version": "1.0.0"
Properti ini mengikuti standar versi semantik. Ini berarti harus selalu terdiri dari tiga angka yang dipisahkan oleh titik
x.x.x
.
Angka pertama adalah versi utama, yang kedua adalah versi minor, yang ketiga adalah tambalan.
Setiap angka memiliki arti khusus: pembaruan untuk memperbaiki bug adalah tambalan, rilis perubahan yang kompatibel mundur adalah rilis kecil, dan rilis utama mungkin berarti perubahan yang tidak kompatibel dengan versi sebelumnya.
Lisensi
Menentukan lisensi untuk paket tersebut.
Sebagai contoh:
"license": "MIT"
Kata kunci
Properti ini adalah serangkaian kata kunci yang terkait dengan paket.
Sebagai contoh:
"keywords": [
"email",
"machine learning",
"ai"
]
Mereka membantu orang menemukan paket.
Deskripsi
Menentukan deskripsi singkat untuk paket.
Sebagai contoh:
"description": "A package to work with strings"
Saat menerbitkan paket ke
npm
properti tertentu, itu membantu orang memahami untuk apa itu.
Gudang
Menentukan di mana kode sumber untuk paket berada.
Sebagai contoh:
"repository": "github:whatever/testing",
Perhatikan awalannya
github
. Ada layanan serupa lainnya:
"repository": "gitlab:whatever/testing",
"repository": "bitbucket:whatever/testing",
Anda juga dapat menentukan sistem kontrol versi:
"repository": {
"type": "git",
"url": "https://github.com/whatever/testing.git"
}
Anda dapat menentukan beberapa sistem kontrol versi:
"repository": {
"type": "svn",
"url": "..."
}
utama
Menentukan file utama (titik masuk) untuk paket.
Saat mengimpor paket ke dalam aplikasi, dalam file ini aplikasi akan mencari modul yang diekspor.
Sebagai contoh:
"main": "src/main.js"
pribadi
Menetapkan properti ini ke nilai
true
mencegah paket agar tidak dipublikasikan secara tidak sengaja npm
.
Sebagai contoh:
"private": true
skrip
Menentukan daftar perintah (skrip) yang dapat dieksekusi (dijalankan).
Sebagai contoh:
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"unit": "jest --config test/unit/jest.conf.js --coverage",
"test": "npm run unit",
"lint": "eslint --ext .js,.vue src test/unit",
"build": "node build/build.js"
}
Skrip ini adalah aplikasi baris perintah. Anda dapat menjalankannya dengan
npm run XXXX
atau yarn run XXXX
, di mana XXXX
nama perintah. Sebagai contoh: npm run dev
.
Nama apa pun dapat digunakan sebagai nama perintah, skrip akan melakukan apa pun yang Anda tentukan di dalamnya.
Ketergantungan
Menentukan daftar dependensi paket.
Saat memasang paket menggunakan npm atau benang:
npm install <PACKAGENAME>
yarn add <PACKAGENAME>
catatan untuk paket ini akan secara otomatis ditambahkan ke properti yang bersangkutan.
Sebagai contoh:
"dependencies": {
"vue": "^2.5.2"
}
ketergantungan
Menentukan daftar dependensi untuk tujuan pengembangan.
Mereka berbeda dari
dependencies
, karena mereka hanya diinstal pada komputer pengembang dan tidak masuk ke produksi.
Saat memasang paket menggunakan npm atau benang:
npm install --save-dev <PACKAGENAME>
yarn add --save-dev <PACKAGENAME>
catatan tentang itu secara otomatis ditambahkan ke properti yang dipertimbangkan.
Sebagai contoh:
"devDependencies": {
"autoprefixer": "^7.1.2",
"babel-core": "^6.22.1"
}
mesin
Menentukan versi Node.js atau alat lain yang dijalankan oleh paket / aplikasi.
Sebagai contoh:
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0",
"yarn": "^0.13.0"
}
daftar browser
Menentukan daftar browser yang didukung (dan versinya). Informasi ini digunakan oleh Babel, Autoprefixer dan alat-alat lain untuk membuat polyfill dan memastikan kompatibilitas dengan browser yang ditentukan.
Sebagai contoh:
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
Pengaturan ini berarti Anda ingin mendukung dua versi terbaru dari semua browser yang digunakan lebih dari 1% orang berdasarkan statistik CanIUse , dengan pengecualian untuk IE8 dan versi yang lebih lama.
Sifat khusus
package.json
dapat berisi properti khusus untuk alat-alat seperti Babel, ESLint, dll.
Masing-masing alat ini memiliki sifatnya sendiri, misalnya
eslintConfig
, babel
dan sebagainya. Untuk detail tentang properti khusus, lihat dokumentasi yang sesuai.
Versi paket
Pada contoh di atas, Anda mungkin memperhatikan entri seperti ini:
~3.0.0
, ^0.13.0
. Apa yang mereka maksud? Dan penentu versi apa lagi yang bisa saya gunakan?
Penentu ini digunakan untuk menentukan kondisi pembaruan.
Aturannya adalah sebagai berikut:
~
- tulis~0.13.0
berarti bahwa hanya pembaruan tambalan yang diizinkan, mis. rilis0.13.1
valid, tetapi rilis0.14.0
tidak^
- Write^0.13.0
berarti tambalan dan pembaruan kecil diizinkan*
- catatan*
berarti bahwa setiap pembaruan diizinkan>
- semua versi baru diizinkan>=
- versi yang sama atau lebih baru diizinkan<=
- Versi serupa atau lebih lama dapat diterima<
- semua versi lama diizinkan
Berikut adalah beberapa aturan lagi:
- tidak ada karakter utama - hanya versi yang ditentukan yang diizinkan
latest
- hanya versi terbaru yang diizinkan
Karakter ini dapat dikombinasikan dalam berbagai cara, misalnya:
1.0.0 || >=1.1.0 <1.2.0
.
Terima kasih atas perhatian Anda.
Bersambung…