Hari ini kami menerbitkan bagian keempat dari terjemahan Node.js. Pada artikel ini, kita akan mulai berbicara tentang npm dan juga mempertimbangkan fitur-fitur file
package.json
dan
package-lock.json
.

[Kami menyarankan Anda untuk membaca] Bagian lain dari siklus iniBagian 1:
Informasi Umum dan MemulaiBagian 2:
JavaScript, V8, beberapa trik pengembanganBagian 3:
Hosting, REPL, bekerja dengan konsol, modulBagian 4:
npm, package.json dan file package-lock.jsonBagian 5:
npm dan npxBagian 6:
loop acara, tumpukan panggilan, timerBagian 7:
Pemrograman AsinkronBagian 8:
Panduan Node.js, Bagian 8: HTTP dan Protokol WebSocketBagian 9:
Panduan Node.js, bagian 9: bekerja dengan sistem fileBagian 10:
Panduan Node.js, Bagian 10: Modul Standar, Streaming, Database, NODE_ENVPDF lengkap dari Node.js Guide Dasar-dasar NPM
Npm (manajer paket simpul) adalah manajer paket Node.js. Pada bagian pertama dari materi ini, kami telah menyebutkan bahwa sekarang di npm ada lebih dari setengah juta paket, yang membuatnya menjadi repositori kode terbesar di dunia yang ditulis dalam satu bahasa. Ini menunjukkan bahwa dalam npm Anda dapat menemukan paket yang dirancang untuk menyelesaikan hampir semua tugas.
Awalnya, npm dibuat sebagai sistem manajemen paket untuk Node.js, tetapi hari ini npm juga digunakan untuk mengembangkan proyek front-end dalam JavaScript. Untuk berinteraksi dengan registri npm, perintah dengan nama yang sama digunakan, yang memberi pengembang sejumlah besar peluang.
â–ŤMemuat paket
Menggunakan perintah
npm
, Anda dapat mengunduh paket dari registri. Di bawah ini kami akan mempertimbangkan contoh penggunaannya.
â–ŤMenginstal semua dependensi proyek
Jika proyek memiliki file
package.json
, maka Anda dapat menginstal semua dependensi proyek ini dengan perintah berikut:
npm install
Perintah ini akan mengunduh semua yang dibutuhkan proyek dan menempatkan materi-materi ini di folder
node_modules
, membuatnya jika tidak ada di direktori proyek.
â–ŤMenginstal paket terpisah
Yang terpisah dapat diinstal dengan perintah berikut:
npm install <package-name>
Anda dapat sering melihat bagaimana perintah ini digunakan tidak dalam bentuk yang sederhana, tetapi dengan beberapa flag. Pertimbangkan mereka:
- Bendera
--save
memungkinkan --save
untuk menginstal paket dan menambahkan entri tentangnya ke bagian dependencies
dari file package.json
, yang menjelaskan dependensi proyek. Ketergantungan ini digunakan oleh proyek untuk mengimplementasikan fungsi utamanya, mereka diinstal selama penyebarannya di server (setelah rilis npm 5, entri tentang paket yang diinstal di bagian dependensi dibuat secara otomatis, dan tanpa menggunakan flag ini). - Bendera
--save-dev
memungkinkan Anda untuk menginstal paket dan menambahkan entri tentangnya ke bagian yang berisi daftar dependensi pengembangan (yaitu, paket yang diperlukan selama pengembangan proyek, seperti perpustakaan untuk pengujian, tetapi tidak diperlukan untuk operasinya) dari file package.json
disebut devDependencies
.
â–Ť Pembaruan Paket
Untuk memperbarui paket, gunakan perintah berikut:
npm update
Setelah menerima perintah ini, npm akan memeriksa semua paket untuk versi baru mereka, dan jika mereka menemukan versi baru mereka yang memenuhi batasan versi paket yang ditentukan dalam
package.json
, instal.
Anda juga dapat memutakhirkan paket terpisah:
npm update <package-name>
â–ŤMengunggah paket versi tertentu
Selain unduhan paket standar, npm juga mendukung pengunduhan versi spesifiknya. Secara khusus, dapat dicatat bahwa beberapa perpustakaan hanya kompatibel dengan rilis besar tertentu dari perpustakaan lain, yaitu, jika dependensi perpustakaan tersebut dipasang tanpa mempertimbangkan versi, ini dapat mengganggu pekerjaan mereka. Kemampuan untuk menginstal versi tertentu dari sebuah paket berguna dalam situasi di mana, misalnya, rilis terbaru dari paket ini sangat cocok untuk Anda, tetapi ternyata ada kesalahan di dalamnya. Menunggu rilis versi tetap dari paket, Anda dapat menggunakan rilis yang lebih lama tetapi stabil.
Kemampuan untuk menentukan versi spesifik dari perpustakaan yang dibutuhkan oleh proyek berguna dalam pengembangan tim ketika semua anggota tim menggunakan perpustakaan yang sama persis. Transisi ke versi baru mereka juga dilakukan secara terpusat, dengan membuat perubahan pada file proyek
package.json
.
Dalam semua kasus ini, kemampuan untuk menentukan versi paket yang diperlukan oleh proyek sangat berguna. Npm mengikuti standar versi semantik (semver).
â–ŤJalankan skrip
File
package.json
mendukung kemampuan untuk menggambarkan perintah (skrip) yang dapat diluncurkan menggunakan konstruksi ini:
npm <task-name>
Sebagai contoh, berikut adalah tampilan daftar skrip pada bagian yang sesuai dari file:
{ "scripts": { "start-dev": "node lib/server-development", "start": "node lib/server-production" } }
Sangat umum untuk menggunakan fitur ini untuk memulai 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", } }
Pendekatan ini memungkinkan untuk mengganti input dari perintah panjang, penuh dengan kesalahan, dengan konstruksi sederhana berikut:
$ npm watch $ npm dev $ npm prod
â–Ť Di mana npm menginstal paket?
Saat memasang paket menggunakan npm (atau
benang ), tersedia dua opsi instalasi: lokal dan global.
Secara default, ketika Anda menggunakan perintah seperti
npm install lodash
, paket muncul di folder
node_modules
terletak di folder proyek. Selain itu, jika perintah di atas dijalankan, npm juga akan menambahkan entri untuk pustaka
lodash
ke bagian
dependencies
file
package.json
, yang ada di direktori saat ini.
Instalasi global paket dilakukan menggunakan flag
-g
:
npm install -g lodash
Dengan menjalankan perintah seperti itu, npm tidak menginstal paket di folder lokal proyek. Sebagai gantinya, itu menyalin file paket ke beberapa lokasi global. Di mana tepatnya file-file ini pergi?
Untuk mengetahuinya, gunakan perintah berikut:
npm root -g
Pada macOS atau Linux, file paket dapat muncul di
/usr/local/lib/node_modules
. Di Windows, itu bisa berupa
C:\Users\YOU\AppData\Roaming\npm\node_modules
.
Namun, jika Anda menggunakan Node.js nvm untuk kontrol versi, jalur ke folder paket global dapat berubah.
Sebagai contoh, saya menggunakan nvm, dan perintah di atas memberi tahu saya bahwa paket global diinstal pada alamat ini: /
/Users/flavio/.nvm/versions/node/v8.9.0/lib/node_modules
/
/Users/flavio/.nvm/versions/node/v8.9.0/lib/node_modules
/
/Users/flavio/.nvm/versions/node/v8.9.0/lib/node_modules
/
/Users/flavio/.nvm/versions/node/v8.9.0/lib/node_modules
/
/Users/flavio/.nvm/versions/node/v8.9.0/lib/node_modules
/
/Users/flavio/.nvm/versions/node/v8.9.0/lib/node_modules
/
/Users/flavio/.nvm/versions/node/v8.9.0/lib/node_modules
/
/Users/flavio/.nvm/versions/node/v8.9.0/lib/node_modules
.
â–ŤGunakan dan jalankan paket yang diinstal dengan npm
Bagaimana cara menggunakan modul yang diinstal menggunakan npm, secara lokal atau global, jatuh ke folder
node_modules
? Misalkan Anda menginstal perpustakaan
lodash
populer, yang berisi banyak fungsi pembantu yang digunakan dalam pengembangan JavaScript:
npm install lodash
Perintah seperti itu akan menginstal perpustakaan di folder lokal dari proyek
node_modules
.
Untuk menggunakannya dalam kode Anda, cukup impor menggunakan perintah need:
const _ = require('lodash')
Bagaimana jika paket tersebut adalah file yang dapat dieksekusi?
Dalam hal ini, file yang dapat dieksekusi akan
node_modules/.bin/ folder
di
node_modules/.bin/ folder
.
Anda dapat melihat bagaimana mekanisme ini bekerja dengan menginstal paket
cowsay . Ini adalah program komik yang ditulis untuk baris perintah. Jika Anda mengirimkan beberapa teks ke paket ini, di konsol, dengan gaya seni ASCII, gambar seekor sapi akan ditampilkan yang "mengucapkan" teks yang sesuai. Makhluk lain dapat "menyuarakan" teks.
Jadi, setelah menginstal paket menggunakan
npm install cowsay
, itu, bersama dengan dependensinya, akan
node_modules
di
node_modules
. Dan dalam folder
.bin
tersembunyi akan ditulis tautan simbolis ke file biner cowsay.
Bagaimana cara melaksanakannya?
Tentu saja, Anda dapat memasukkan sesuatu seperti
./node_modules/.bin/cowsay
di terminal untuk memanggil program, ini adalah pendekatan yang berfungsi, tetapi jauh lebih baik menggunakan
npx , alat untuk meluncurkan paket eksekusi npm, termasuk dalam npm sejak versi 5.2. Yaitu, dalam kasus kami, kami membutuhkan perintah berikut:
npx cowsay
Path ke paket npx akan ditemukan secara otomatis.
File package.json
File
package.json
adalah elemen penting dari banyak proyek berdasarkan ekosistem Node.js. Jika Anda memprogram dalam JavaScript, apakah itu pengembangan server atau klien, maka Anda mungkin sudah melihat file ini. Mengapa itu dibutuhkan? Apa yang harus Anda ketahui tentang dia dan peluang apa yang dia berikan kepada Anda?
Package.json
adalah semacam file manifes untuk proyek. Dia menempatkan pada pengembang kemungkinan beragam beragam. Sebagai contoh, ini mewakili repositori pusat pengaturan untuk alat yang digunakan dalam proyek. Selain itu, ini adalah tempat
npm dan
benang menulis informasi tentang nama dan versi paket yang diinstal.
â–Ť Struktur file
Berikut adalah contoh file
package.json
sederhana:
{ }
Seperti yang Anda lihat, itu kosong. Tidak ada persyaratan ketat mengenai apa yang harus ada dalam file tersebut untuk aplikasi tertentu. Satu-satunya persyaratan untuk struktur file adalah harus mengikuti aturan format JSON. Jika tidak, file ini tidak dapat dibaca oleh program yang mencoba mengakses kontennya.
Jika Anda membuat paket Node.js yang ingin Anda bagikan melalui npm, maka semuanya berubah secara radikal, dan
package.json
Anda harus memiliki seperangkat properti yang akan membantu orang lain menggunakan paket tersebut. Kami akan membicarakan lebih lanjut tentang ini nanti.
Berikut ini contoh lain
package.json
:
{ "name": "test-project" }
Ini menetapkan properti
name
, yang nilainya adalah nama aplikasi atau paket yang materinya terkandung dalam folder yang sama di mana file ini berada.
Berikut adalah contoh yang lebih rumit yang saya ambil dari contoh aplikasi yang ditulis menggunakan 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" ] }
Seperti yang Anda lihat, ada banyak hal menarik. Yaitu, sifat-sifat berikut dapat dibedakan di sini:
name
- mengatur nama aplikasi (paket).version
- berisi informasi tentang versi aplikasi saat ini.description
- description
singkat dari aplikasi.main
- mengatur titik masuk ke aplikasi.private
- jika properti ini disetel ke true
, ini mencegah paket dari yang tidak sengaja diterbitkan ke npm.scripts
- mendefinisikan satu set skrip Node.js yang dapat dijalankan.dependencies
- berisi daftar paket npm yang menjadi dasar aplikasi.devDependencies
- berisi daftar paket npm yang digunakan saat mengembangkan sebuah proyek, tetapi tidak ketika itu benar-benar berfungsi.engines
- mengatur daftar versi Node.js tempat aplikasi berjalan.- daftar browser - digunakan untuk menyimpan daftar browser (dan versinya) yang harus didukung aplikasi.
Semua properti ini digunakan oleh npm atau oleh alat lain yang digunakan selama siklus hidup aplikasi.
â–ŤProperti yang digunakan dalam package.json
Mari kita bicara tentang properti yang bisa digunakan di
package.json
. Di sini kita akan menggunakan istilah "paket", tetapi semua yang dikatakan tentang paket juga berlaku untuk aplikasi lokal yang tidak direncanakan untuk digunakan sebagai paket.
Sebagian besar properti yang kami uraikan hanya digunakan untuk kebutuhan
repositori npm, beberapa digunakan oleh program yang berinteraksi dengan kode seperti npm yang sama.
Nama properti
Properti
name
menetapkan nama paket:
"name": "test-project"
Nama harus lebih pendek dari 214 karakter, tidak boleh termasuk spasi, hanya terdiri dari huruf kapital, tanda hubung (
-
) dan garis bawah (
_
).
Pembatasan serupa ada karena ketika sebuah paket diterbitkan dalam npm, namanya digunakan untuk membentuk URL halaman paket.
Jika Anda menerbitkan kode paket pada GitHub, di domain publik, maka pilihan yang baik untuk nama paket adalah nama repositori GitHub yang sesuai.
Properti penulis
Properti
author
berisi informasi tentang pembuat paket:
{ "author": "Flavio Copes <flavio@flaviocopes.com> (https://flaviocopes.com)" }
Itu dapat disajikan dalam format berikut:
{ "author": { "name": "Flavio Copes", "email": "flavio@flaviocopes.com", "url": "https://flaviocopes.com" } }
Properti kontributor
Properti
contributors
berisi array dengan informasi tentang orang-orang yang berkontribusi pada proyek:
{ "contributors": [ "Flavio Copes <flavio@flaviocopes.com> (https://flaviocopes.com)" ] }
Properti ini mungkin terlihat seperti ini:
{ "contributors": [ { "name": "Flavio Copes", "email": "flavio@flaviocopes.com", "url": "https://flaviocopes.com" } ] }
Properti bug
Properti
bugs
berisi tautan ke pelacak bug proyek, sangat mungkin tautan seperti itu akan mengarah ke halaman sistem pelacakan kesalahan GitHub:
{ "bugs": "https://github.com/flaviocopes/package/issues" }
Properti beranda
Properti
homepage
memungkinkan Anda untuk mengatur beranda paket:
{ "homepage": "https://flaviocopes.com/package" }
Properti versi
Properti
version
berisi informasi tentang versi paket saat ini:
"version": "1.0.0"
Saat membentuk nilai properti ini, Anda harus mengikuti aturan
versi semantik . Ini berarti, khususnya, bahwa nomor versi selalu diwakili oleh tiga digit: xxx
Angka pertama adalah versi utama dari paket, yang kedua adalah versi minor, yang ketiga adalah versi patch.
Mengubah angka-angka ini membawa arti tertentu. Dengan demikian, rilis paket di mana kesalahan hanya diperbaiki menyebabkan peningkatan nilai versi patch. Jika sebuah paket dilepaskan, perubahan yang dibuat yang kompatibel dengan rilis sebelumnya, maka versi kecil berubah. Versi utama paket mungkin berisi perubahan yang membuat paket ini tidak kompatibel dengan paket versi utama sebelumnya.
Properti lisensi
Properti
license
berisi informasi
license
paket:
"license": "MIT"
Properti kata kunci
Properti
keywords
berisi serangkaian kata kunci yang terkait dengan fungsionalitas paket:
"keywords": [ "email", "machine learning", "ai" ]
Pilihan kata kunci yang tepat membantu orang menemukan apa yang mereka butuhkan ketika mencari paket untuk memecahkan masalah tertentu, memungkinkan mereka untuk mengelompokkan paket dan dengan cepat mengevaluasi fungsionalitas yang mungkin ketika melihat situs npm.
Deskripsi properti
Properti
description
berisi deskripsi singkat tentang paket:
"description": "A package to work with strings"
Properti ini sangat penting jika Anda berencana untuk mempublikasikan paket dalam npm, karena memungkinkan pengguna situs npm untuk memahami tujuan paket.
Properti repositori
Properti
repository
menunjukkan di mana repositori paket berada:
"repository": "github:flaviocopes/testing",
Perhatikan bahwa nilai properti ini memiliki awalan
github
. Npm juga mendukung awalan untuk beberapa layanan populer semacam ini:
"repository": "gitlab:flaviocopes/testing", "repository": "bitbucket:flaviocopes/testing",
Sistem kontrol versi yang digunakan dalam pengembangan paket juga dapat diatur secara eksplisit:
"repository": { "type": "git", "url": "https://github.com/flaviocopes/testing.git" }
Paket yang sama dapat menggunakan sistem kontrol versi yang berbeda:
"repository": { "type": "svn", "url": "..." }
Properti utama
Properti
main
menetapkan titik masuk ke paket:
"main": "src/main.js"
Ketika sebuah paket diimpor ke dalam aplikasi, ini adalah tempat pencarian akan dilakukan untuk apa yang ekspor modul yang sesuai.
Properti pribadi
Properti
private
disetel ke
true
mencegah paket agar tidak dipublikasikan secara tidak sengaja ke npm:
"private": true
Properti skrip
Properti
scripts
mengatur daftar skrip atau utilitas yang dapat diluncurkan menggunakan alat npm:
"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 menggunakan npm atau benang, masing-masing, dengan menjalankan perintah dari form
npm run XXXX
atau
yarn XXXX
, di mana
XXXX
adalah nama skrip. Misalnya, mungkin terlihat seperti ini:
npm run dev
Script dapat dipanggil seperti yang Anda inginkan, mereka dapat melakukan hampir semua hal yang mungkin diinginkan pengembang.
Properti ketergantungan
Properti
dependencies
berisi daftar paket npm yang diinstal sebagai dependensi paket:
"dependencies": { "vue": "^2.5.2" }
Saat memasang paket menggunakan npm atau benang, perintah berikut digunakan:
npm install <PACKAGENAME> yarn add <PACKAGENAME>
Paket-paket ini secara otomatis ditambahkan ke daftar dependensi dari paket yang sedang dikembangkan.
Properti DevDependencies
Properti
devDependencies
berisi daftar paket npm yang diinstal sebagai dependensi pengembangan:
"devDependencies": { "autoprefixer": "^7.1.2", "babel-core": "^6.22.1" }
Daftar ini berbeda dari yang disimpan di properti
dependencies
, karena paket yang tersedia di dalamnya diinstal hanya dalam sistem pengembang paket, dalam penggunaan praktis paket, mereka tidak digunakan.
Paket termasuk dalam daftar ini ketika mereka diinstal menggunakan npm atau benang, sebagai berikut:
npm install --dev <PACKAGENAME> yarn add --dev <PACKAGENAME>
Properti mesin
Properti
engines
menunjukkan versi Node.js dan produk perangkat lunak lain yang digunakan untuk menyediakan paket:
"engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0", "yarn": "^0.13.0" }
Properti daftar browser
Properti daftar
browserlist
memungkinkan
browserlist
untuk melaporkan browser mana (dan versinya) yang akan didukung oleh pengembang paket:
"browserslist": [ "> 1%", "last 2 versions", "not ie <= 8" ]
Properti ini digunakan oleh Babel, Autoprefixer, dan alat lainnya. Analisis daftar ini memungkinkan mereka untuk menambah hanya paket polyfill dan mekanisme tambahan yang diperlukan untuk browser yang terdaftar.
Nilai properti daftar
browserlist
ditampilkan di sini sebagai contoh berarti bahwa Anda ingin mendukung setidaknya 2 versi utama dari semua browser dengan penggunaan minimal 1% (data ini diambil dari
CanIUse.com ), dengan pengecualian IE 8 dan versi yang lebih lama dari browser ini (selengkapnya ini dapat ditemukan di
halaman paket
browserlist ).
Pengaturan penyimpanan dalam package.json untuk berbagai alat perangkat lunak
Di
package.json
Anda dapat menyimpan pengaturan untuk berbagai alat bantu seperti Babel atau ESLint.
Masing-masing alat ini memiliki properti khusus, seperti
eslintConfig
atau
babel
. Rincian tentang penggunaan properti tersebut dapat ditemukan dalam dokumentasi masing-masing proyek.
â–ŤTentang versi paket dan versi semantik
, , , . ,
~3.0.0
^0.13.0
. , , .
, , , , :
~
: ~0.13.0
, - . , 0.13.1
, 0.14.0
— .^
: ^0.13.0
, , - . , 0.13.1
, 0.14.0
, .*
: , , , — .>
: , .>=
: , .<=
: , .<
: , .=
: .-
: , — 2.1.0 - 2.6.2
.||
: , . < 2.1 || > 2.6
.
:
, , -. ,
1.0.0 || >=1.1.0 <1.2.0
,
1.0.0
, ,
1.1.0
,
1.2.0
.
package-lock.json
package-lock.json
npm 5. Node.js-. ? ,
package.json
, .
, , , , .
,
package.json
.
package.json
, (- ) .
Git
node_modules
, . ,
npm install
, , ,
~
, -, , , -.
^
. , , , .
, - ,
npm install
. , . , , - , , , ( ) .
package-lock.json
npm
npm install
.
, , ( Composer PHP) .
package-lock.json
Git-, , , , , Git .
package-lock.json
npm update
.
â–Ť package-lock.json
package-lock.json
, cowsay, npm
install cowsay
:
{ "requires": true, "lockfileVersion": 1, "dependencies": { "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3. 0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "cowsay": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/cowsay/-/cowsay-1.3.1.tgz" , "integrity": "sha512-3PVFe6FePVtPj1HTeLin9v8WyLl+VmM1l1H/5P+BTTDkM Ajufp+0F9eLjzRnOHzVAYeIYFF5po5NjRrgefnRMQ==", "requires": { "get-stdin": "^5.0.1", "optimist": "~0.6.1", "string-width": "~2.1.1", "strip-eof": "^1.0.0" } }, "get-stdin": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0. 1.tgz", "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=" }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/ is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "minimist": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10 .tgz", "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "requires": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" } }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" } }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { "ansi-regex": "^3.0.0" } }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" } } }
. cowsay, :
- get-stdin
- optimist
- string-width
- strip-eof
, , ,
requires
, :
- ansi-regex
- is-fullwidth-code-point
- minimist
- wordwrap
- strip-eof
,
version
,
resolved
, ,
integrity
, .
npm
package.json
package-lock.json
. npm npx.
Pembaca yang budiman! — npm yarn?
