隨著我們專案的複雜的提升,在開發中我們不可能所有的程式碼都要手動一行一行的編寫,於是我們就需要將一些現成寫好的程式碼引入到我們的專案中來幫助我們完成開發,就像是我們之前使用jQuery,我們稱之為包,越是複雜的專案,其中需要的包就越多,那我們如何下載包,刪除包,更新包?
1.NPM
node中的包管理器叫npm(node package manage),由npm網站,npm cli和倉庫組成
npm的下載
npm -v
來檢視npm是否安裝成功package.json
這個組態檔package.json
它是一個包的描述檔案,就是包的各種資訊都在這個裡面,如版本,包名,依賴等
{
"name": "my-awesome-package",
"version": "1.0.0",
"description": "我的包的概要簡短描述",
"license": "MIT",
}
還有很多,請看下面:
2.package.json
規則:
.
)或者下劃線(_
)開頭//name
{
"name": "my-awesome-package"
}
//version
{
"version": "1.0.0"
}
Tips
:
Node.js
核心模組相同的名字js
或者node
單詞require()
呼叫裡安裝包
npm install [包名]
yarn add [包名]
node_modules/[包名]
description
{
"description": "我的包的概要簡短描述"
}
license
{
"license": "MIT",
"license": "(MIT or GPL-3.0)",
"license": "SEE LICENSE IN LICENSE_FILENAME.txt",
"license": "UNLICENSED"
}
keywords
{
"keywords": [
"short", "relevant", "keywords"
]
}
各種指向專案檔案、issues 上報,以及程式碼託管網站的連結欄位。
homepage
{
"homepage": "https://your-package.org"
}
repository
{
"repository": {
"type": "git", "url": "https://github.com/user/repo.git"
},
"repository": "github:user/repo",
"repository": "gitlab:user/repo",
"repository": "bitbucket:user/repo",
"repository": "gist:a1b2c3d4e5f"
}
bugs
{
"bugs": "https://github.com/user/repo/issues"
}
專案的維護者。
author
{
"author": {
"name": "Your Name",
"email": "[email protected]",
"url": "http://your-x.com"
},
"author": "Your Name <[email protected]> (http://your-x.com)"
}
contributors
{
"contributors": [
{ "name": "Your Friend", "email": "[email protected]", "url": "http://friends-xx.com" }
{ "name": "Other Friend", "email": "[email protected]", "url": "http://other-xx.com" }
],
"contributors": [
"Your Friend <[email protected]> (http://friends-xx.com)",
"Other Friend <[email protected]> (http://other-xx.com)"
]
}
指定包含在專案中的檔案,以及專案的入口檔案。
files
{
"files": [
"filename.js",
"directory/",
"glob/*.{js,json}"
]
}
main
{
"main": "filename.js"
}
man
{
"man": "./man/doc.1",
"man": ["./man/doc.1", "./man/doc.2"]
}
directories
{
"directories": {
"lib": "path/to/lib/",
"bin": "path/to/bin/",
"man": "path/to/man/",
"doc": "path/to/doc/",
"example": "path/to/example/"
}
}
bin
{
"bin": "bin.js",
"bin": {
"命令名稱": "bin/命令路徑/命令名稱.js",
"other-command": "bin/other-command"
}
}
簡短說明一下
esnext
:ES模組中使用階段4功能(或更舊版本)的原始碼,未編譯。
main
:指向一個CommonJS模組(或UMD模組),其 JavaScript
與 Node.js
當前可以處理的一樣現代。
大多數 module
用例應該可以通過 esnext
處理。
browser
可以通過 esnext
的擴充套件版本來處理
另請參閱:通過 npm 交付未編譯的原始碼
{
"main": "main.js",
"esnext": {
"main": "main-esnext.js",
"browser": "browser-specific-main-esnext.js"
}
}
module
browser
作為 JavaScript
包或元件工具的提示,在這裡。
"browser": {
"module-a": "./shims/module-a.js",
"./server/only.js": "./shims/client-only.js"
}
包裡還可以包含一些可執行指令碼或者其他設定資訊。
scripts
指令碼是定義自動化開發相關任務的好方法,比如使用一些簡單的構建過程或開發工具。 在 scripts
欄位裡定義的指令碼,可以通過 yarn run
命令來執行。 例如,上述 build-project
指令碼可以通過 yarn run build-project
呼叫,並執行 node build-project.js
。
有一些特殊的指令碼名稱。 如果定義了 preinstall
指令碼,它會在包安裝前被呼叫。 出於相容性考慮,install
、postinstall
和 prepublish
指令碼會在包完成安裝後被呼叫。
start
指令碼的預設值為 node server.js
。
參考檔案:npm docs
{
"scripts": {
"build-project": "node build-project.js"
}
}
特定的scripts
config
{
"config": {
"port": "8080"
}
}
{
"scripts": {
"run": "echo $npm_package_config_port"
}
}
你的包很可能依賴其他包。你可以在你的 package.json
檔案裡指定那些依賴。
dependencies
{
"dependencies": {
"colors": "*",
"foo": "1.0.0 - 2.9999.9999",
"bar": ">=1.0.2 <2.1.2",
"baz": ">1.0.2 <=2.3.4",
"boo": "2.0.1",
"qux": "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0",
"asd": "http://asdf.com/asdf.tar.gz",
"til": "~1.2",
"elf": "~1.2.3",
"two": "2.x",
"thr": "3.3.x",
"lat": "latest",
"dyl": "file:./path/to/dyl",
"pla": "https://github.com/user/project/tarball/branch",
"stu": "git://github.com/user/project.git#commit-ish"
}
}
devDependencies
{
"devDependencies": {
"package-2": "^0.4.2"
}
}
``peerDependencies`
{
"peerDependencies": {
"package-3": "^2.7.18"
}
}
optionalDependencies
{
"optionalDependencies": {
"package-5": "^1.6.1"
}
}
bundledDependencies
{
"bundledDependencies": [
"package-4"
]
}
``peerDependenciesMeta`
{
"peerDependenciesMeta": {
"node-sass": {
"optional": true
},
"sass": {
"optional": true
},
"fibers": {
"optional": true
}
}
}
以上就是package.json的部分設定了,可以參考npm docs. 那我們繼續來說npm
1.NPM
通常情況下,我們的自己建立的每個node專案,都可以被認為是一個包,都應該為其建立package.json描述檔案,我們的npm在建立package.json檔案,只需要進入專案,輸入 npm init
,就可以進入到互動介面,來輸入指定資訊,建立包,我們一般通過npm init -y
直接預設來建立package.json,無論怎麼樣,建立一個即可,如果想要檢視完整命令:
安裝命令為npm i <包名>
我們執行一下npm i lodash
安裝一個包
1.首先我們看到的,呼叫後它會自動連線npm伺服器,將最新的loadsh包下載到專案的node_modules
目錄下,如果目錄不存在下載包時會自動建立。
它會修改package.json檔案,在dependencies欄位中將剛剛下載的包設定為依賴項
"dependencies": {
"lodash": "^4.17.21"
}
可以指定版本進行安裝
npm install [email protected]
npm install lodash@"> 3.2.0"
如果不希望,包出現在package.json的依賴中,可以新增–no-save指令禁止, 也可以通過-D或–save-dev,將其新增到開發依賴
npm install lodash --no-save
npm install lodash -D
安裝包後專案中會自動生成package.lock.json
檔案,這個檔案主要是用來記錄當前專案的下包的結構和版本的,提升重新下載包的速度,以及確保包的版本正確。
列出此軟體中所有依賴項的已安裝版本
npm list
npm i <包名> -g
npm uninstall <包名>
或者npm un <包名>
npm install -g cnpm --registry=https://registry.npmmirror.com
npm set registry https://registry.npmmirror.com
npm config delete registry
2.Yarn
早期的npm存在有諸多問題,不是非常的好用。yarn的出現就是為了幫助我們解決npm中的各種問題
在新版本的node中,corepack中已經包含了yarn,可以通過啟用corepack的方式使yarn啟用。首先執行以下命令啟用corepack :
corepack enable
檢視yarn的版本
yarn -v
切換yarn版本,最新版:
corepack prepare yarn@stable --activate
切換為1.x.x的版本
corepack prepare yarn@1 --activate
yarn init (初始化,建立package.json)
yarn add xxx(新增依賴)
yarn add xxx -D(新增開發依賴)
yarn remove xxx(移除包)
yarn(自動安裝依賴)
yarn run(執行自定義指令碼)
yarn <指令>(執行自定義指令碼)
yarn global add(全域性安裝)
yarn global remove(全域性移除)
yarn global bin(全域性安裝目錄)
設定:
yarn config set registry https://registry.npmmirror.com
恢復:
yarn config delete registry
pnpm又是一款node中的包管理器,我真的不想在介紹了。但是想想還是說一下吧,畢竟也不難。作為初學者的你,npm、yarn和pnpm選一個學一學就可以了。
npm install -g pnpm
pnpm init(初始化專案,新增package.json)
pnpm add xxx(新增依賴)
pnpm add -D xxx(新增開發依賴)
pnpm add -g xxx(新增全域性包)
pnpm install(安裝依賴)
pnpm remove xxx(移除包)
設定:
pnpm config set registry https://registry.npmmirror.com
恢復:
pnpm config delete registry