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.stdinbaris 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.
readlineberisi 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 inquirerdan 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.jsterletak 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.exportsdisediakan 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.exportsdan exports?
Yang pertama mengekspor objek yang direferensikan, yang kedua properti dari objek.
Pengantar manajer paket npm
Pengantar npm
npmApakah 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.
npmmelakukan beberapa hal.
Alternatif untuk npm adalah benang .
Memuat
npmmengelola pemuatan dependensi proyek.
Jika ada file dalam proyek,
package.jsonpeluncuran npm installakan menginstal semua yang diperlukan proyek ke direktori node_modulesyang 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.
npmakan 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,
npmmengikuti standar yang diterima.
Menjalankan tugas
package.jsonmendukung 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,
npmAnda dapat memilih antara dua jenis instalasi:
- lokal
- global
Secara default, ketika Anda memasukkan
npm installmisalnya:
npm install lodash
paket diinstal ke folder
node_modulesdi direktori saat ini.
Setelah instalasi
npmmenambahkan catatan lodashke bagian dependenciesfile package.jsondi 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
nvmuntuk versi Node.js.
Bagaimana cara menggunakan paket yang diinstal?
Cara menggunakan
node_modulespaket yang dipasang di folder atau secara global.
Katakanlah Anda menginstal
lodashpustaka pembantu JavaScript populer npm install lodash.
Perintah ini akan dipasang
lodashke 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
.bindisembunyikan dan berisi tautan simbolis ke cowsay data biner:
Bagaimana cara menjalankannya?
Anda tentu saja dapat mengetik
./node_modules/.bin/cowsaydan itu harus bekerja, tetapi npx yang disertakan dengan npm (karena 5.2) adalah pilihan terbaik. Anda lakukan sajanpx cowsaydan 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.jsonAdalah 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 npmdan yarn).
Struktur file
Ini sebuah contoh
package.json:
{}
Seperti yang Anda lihat, itu kosong. Tidak
package.jsonada 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.jsondipinjam 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- nilaitruemencegah publikasi aplikasi secara tidak disengajanpmscripts- 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
npmURL 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
npmproperti 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
truemencegah 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 XXXXatau yarn run XXXX, di mana XXXXnama 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.jsondapat berisi properti khusus untuk alat-alat seperti Babel, ESLint, dll.
Masing-masing alat ini memiliki sifatnya sendiri, misalnya
eslintConfig, babeldan 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.0berarti bahwa hanya pembaruan tambalan yang diizinkan, mis. rilis0.13.1valid, tetapi rilis0.14.0tidak^- Write^0.13.0berarti 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…