一、為什么要用包管理工具?
- 每種語言擴展的包很多,如js有
jquery
React
Vue
等。這就是直接使用別人已經寫好的。
傳統做法是:去官網下載對應的js包,然后放進項目的路徑下。然后在使用的文件里引用。
有了npm和yarn等包管理工具后的做法:包管理工具都有一個集中倉庫,所有開放的包都放在這個倉庫里,方便了查找和下載。
即開放的包都放在了npm搭建的服務器里,我們需要時,可以使用npm提供的命令去他的服務器上查找相應的版本進行下載。 - 管理包之間的依賴關系:
如:我的一個項目里,使用了一個包A,然后這個包A又依賴于包B,包B又依賴于包C,D等。而且每個包都有確定的版本(不一定是最新的,版本相差太大,會出現API不兼容的情況)。
A -》B -》C,D
在沒有包管理之前:人工去下載每一個依賴的包或者使用語言把每個包常用的功能自己實現一遍。
二、為什么要搭建npm私有倉庫(私服)?
例:
- 我有三個vue項目A、B 、C。
- 我在A項目寫了一個
table
組件,又不能將這個組件發布到npm公共社區里。
沒有npm私服時的做法:
- 這時如果B和C項目要用帶這個組件的話,只能去A項目里復制一份粘貼到B和C項目。
- 如果后面
table
組件更新了的話,又只能復制粘貼。
如上這種情況,耗費時間。有時還會忘了哪個項目的組件時最新的。一個組件都這么麻煩,如果是多個組件和多個項目,維護簡直要瘋了。
如果我們有npm私有倉庫的做法:
- 將
table
組件發布到私有倉庫里 - 每個項目啟動前,執行npm 命令重新下載更新組件即可。
私有npm私有倉庫的好處
- 便于管理企業內的業務組件或者模塊
- 私密性
- 確保npm服務快速穩定(私服通常搭建在內部的服務器里)
- 控制npm模塊質量和安全(防止惡意代碼植入)
三、npm安裝流程
*沒有私服:
- 當我們使用
npm install
去安裝一個模塊時,會先檢查node_modules
目錄中是否已經存在這個模塊。 - 如果沒有則會向遠程倉庫查詢,下載并解壓到本地進行安裝。
有私服:
- 用戶install后向私有npm服務器發起請求,私有服務器會先查詢所請求的這個模塊是我們自己的私有模塊或已經緩存過的公共模塊。
- 如果是則直接將模塊返回給用戶。
- 如果請求的是一個還沒有被緩存的公共模塊,那么則會向上游源請求模塊并進行緩存后返回給用戶。
- 上游的源可以是npm倉庫地址,也可以是淘寶鏡像地址。
四、npm的命令和知識點
1.通用查看
1.1 npm root -g
查看通過-g
選項全局安裝的模塊的地址。
1.2
npm whoami
查看當前登錄npm的賬戶。publish發布包時可以查看用戶是否正確。
1.3
npm login
:登錄1.4
npm adduser
:添加新用戶
2. npm配置文件
2.1
npm config list -l
列出npm的左右默認配置項。
2.2
npm config get cache
獲取npm的緩存目錄。config里的所有配置項都可以通過get獲取。
2.3
npm config get registry
獲取node包存放的服務器地址。
3. npm獲取配置的優先級
下面優先級由高到低:
3.1 命令行參數
3.2 環境變量
3.3 用戶配置文件(.npmrc
):npm config get userconfig
用于查看所在地址,通常在電腦用戶文件夾下。
3.4 全局配置文件:通過
npm config get globalconfig
查看文件地址。3.5 內置配置文件:npm安裝目錄下的npmrc文件。
我的:
D:\SOFTWARE\Node\node_modules\npm
3.6 默認配置:npm本身都有默認的配置參數,如果以上都沒有設置,則npm會使用默認的配置參數。
注:在使用命令進行屬性配置時,屬性默認是被存儲與用戶的配置文件(.npmrc
)中的,命名后加上--global
則會被存儲在全局配置文件中。
4.配置npm的注冊源方式
4.1 通過給npm命令添加注冊源選項:這種方式指定的注冊源只在本條命令內有效。
4.2 通過npm的config命令配置指向國內鏡像源:以后所有從倉庫獲取的包都從這個地址獲取,不走國外的地址。
注:這條命令時將配置信息更新到
電腦用戶
下的.npmrc
文件。我的這個文件地址:C:\Users\Thinkpad\.npmrc
4.3 直接修改
C:\Users\Thinkpad\.npmrc
文件,打開后修改:
// .npmrc
registry=https://registry.npm.taobao.org
以上都是為下面配置npm私服做準備的,畢竟需要知道為什么這么做。
五、windows10配置npm的nexus
私服
1.下載軟件
點此處去官網下載
下載有點慢,請耐心等待。
2.解壓壓縮包,進入如下圖的地址(版本號在截圖里有):
2.1 不要直接點擊nexus.exe,在該目錄下使用命令行運行:
nexux.exe /run
2.2 啟動后默認的地址是:
http://localhost:8081
。建議第一次自己配置時,不要修改配置文件的地址和端口。但如果端口被占用,那么只有修改了。修改過后可能會出現一些問題。默認賬號:admin/admin123
2.3 打開下圖目錄下的
nexus-default.properties
文件可以修改端口和地址,別的選項不知道什么意思就別動。2.4 如果在啟動時報如下的錯:
那么就是
nexus.exe
的解壓路徑有中文,把中文改了就可以了。
3.建立倉庫
打開http://localhost:8081
,后登錄賬號。
3.1 創建知識庫,有三種類型。
3.2 創建npm(hosted)
私有倉庫
3.3 創建npm(proxy)
代理倉庫
3.4 創建npm(group)
倉庫組
3.5 查看新建的三個倉庫
點進倉庫,可以看到這個倉庫的地址。
我的三個倉庫的地址分別是(鏈接是點不動的):
- http://localhost:8081/repository/npm-test-hosted/
- http://localhost:8081/repository/npm-test-proxy/
- http://localhost:8081/repository/npm-test-group/
3.6 配置權限
4. 配置npm
直接執行命令:
npm config set registry http://localhost:8081/repository/npm-test-group/
具體的意思參考本文的第四部分:npm的命令和知識點。
5.新建一個npm包,發布到建立的私服
建立如下圖所示的yx-test-local
包
5.1 package.json文件使用npm init -y
生成。
5.2 新建index.js
文件,內容如下。
// index.js
module.exports = 123456789;
5.3 進入yx-test-local
包根目錄,發布包。
直接執行如下圖命名發布包時報錯:當時一直以為是權限的問題,但使用電腦Administator
賬戶也同樣報錯。應該是步驟和添加用戶時的倉庫地址的問題。
5.3.1 先登錄
hosted
倉庫注意:當
npm adduser
和npm login
時,操作的倉庫一定是hosted
,是私有的。不能是group
。因為我們的包是要發布到hosted
的5.3.2 執行上傳
5.3.3 查看上傳的包
上面除了上傳到私有倉庫的
yx-test-local
包以外,別的包都是進行測試下載的包被緩存到了私服里。
6.下載私有包和開放的包
6.1 新建npm
文件夾,進入文件夾
6.2 下載私有包
上圖紅框的請求地址就是我們剛新建的倉庫組的地址。
6.3 下載開發的包
從代理倉庫配置的地址進行下載后緩存。