(補)npm 全域安裝與本地安裝、開發依賴和生產依賴
文章目錄
- (補)npm 全域安裝與本地安裝、開發依賴和生產依賴
- 一、全域安裝與本地安裝
- 1. 全域安裝:
- 2. 本地安裝:
- 3. 全域安裝的作用:
- 4. 可以全域安裝,那么直接全域安裝到處使用就行了,干嘛還需要本地安裝?
- 二、開發依賴和生產依賴
- 1. 開發環境和生產環境
- 2. 生產依賴
- 3. 開發依賴
一、全域安裝與本地安裝
1. 全域安裝:
npm install <pageName> -g//(這里-g是-global的簡寫)
通過上面的命令列(帶-g修飾符)安裝某個包,就叫全域安裝,通常全域包安裝在node目錄下的node_modules檔案夾,可以通過執行下面幾條命令查看node、npm的安裝目錄和全域包的安裝目錄,
which node // 查看node的安裝目錄
which npm // 查看npm的安裝目錄
npm root -g // 查看全域包的安裝目錄
npm list -g --depth 0 //查看全域安裝過的包
2. 本地安裝:
npm install <pageName> (后面可以加幾種修飾符,主要有兩種--save-dev和--save)
通過上面的命令列安裝某個包,就叫本地安裝,包安裝在你當前專案檔案夾下的node_modules檔案夾中,
3. 全域安裝的作用:
全域安裝的包可提供直接執行的命令(例:gulp -h可以查看gulp定義了什么命令), 比如gulp全域安裝后,可以在命令列上直接執行gulp -v、gulp -h等(原理:全域安裝的gulp會將其package.json中的bin命令注入到了全域環境,使得你可以全域執行:gulp xxx命令,這另一個話題了,不深入),倘若只在本地安裝了gulp,未在全域安裝gulp,直接執行這些命令會報錯,你想要執行相應的命令則可能需要例如:node ./node_modules/gulp/bin/gulp.js -v(查看版本) 這樣用一大串命令來執行,**因此全域安裝就發揮到他的好處了,**一個gulp -v就搞定
當然,不是每個包都必須要全域安裝的,**一般在專案中需要用到該包定義的命令才需要全域安裝,**比如gulp 執行gulp任務…等,所以是否需要全域安裝取決于我們如何使用這個包,全域安裝的就像全域變數有點粗糙,但在某些情況下也是必要的,全域包很重要,但如果不需要,最好避免使用,
4. 可以全域安裝,那么直接全域安裝到處使用就行了,干嘛還需要本地安裝?
- 如果只是全域安裝了而沒本地安裝,就得require(’’) 例:引入一個全域的包可能就是requirt(’/usr/local/…’)通過全域包的路徑引入,這樣顯然十分的不靈活,如果安裝了本地包,那么就可以直接require(’’)引入使用,
- 一個包通常會在不同的專案上會重復用到,如果只全域安裝,那么當某個專案需要該包更新版本時,更新后可能就會影響到其他同樣參考該包的專案,因此本地安裝可以更靈活地在不同的專案使用不同版本的包,并避免全域包污染的問題,
一個經驗法則:要用到該包的命令執行任務的就需要全域安裝,要通過require引入使用的就需要本地安裝( 但實際開發程序中,我們也不怎么需要考慮某個包是全域安裝還是本地安裝,因為這一點在該包的官網上一般會明確指出,以上是為了理解全域安裝和本地安裝),
二、開發依賴和生產依賴
順著上面講到的本地安裝,本地安裝有兩種主要的安裝方式:
- 保存到開發依賴(devDependencies): npm install --save-dev
- 保存到生產依賴(dependencies): npm install --save
**"開發依賴"顧名思義在開發環境中用到的依賴,"生產依賴"在生產環境中用到的依賴,**那么這里又延伸出個問題什么是開發環境、什么是生產環境?
1. 開發環境和生產環境
【開發環境】:指的是你的專案尚且在編碼階段時的環境,你在代碼可能還有各種console.log()、注釋、格式化等,
【生產環境】:指的是你的專案已經完成編碼,并發布上線可供用戶瀏覽的階段時的環境,代碼可能經過了壓縮、優化等處理,
**這些概念其實并沒有一個很明確的定義,接下來我們舉例個場景,將"開發環境"、“生產環境"和上面的"開發依賴”、"生產依賴"聯系起來就會比較容易理解的了,**假如我們在開發程序中使用jQuery,在以往,可能就是把jQuery這個插件下載的本地,再通
2. 生產依賴
回到環境和依賴話題,**我們下載的jQuery,在開發時參與原始碼撰寫,在發布上線的生產環境中也是需要它的,不僅在開發環境撰寫代碼時要依賴它、線上環境也要依賴它,因此將它歸類為"生產依賴",**安裝時執行npm install jquery --save,它就會被記錄在package.json的dependencies,當進行代碼打包時,會將這里的jQuery打包入我們的專案代碼中,
3. 開發依賴
接著,假如我們用gulp對html進行壓縮,我們通常會用到一個插件gulp-htmlmin,我們只希望它把html壓縮完就ok了,并不希望它融入我們的專案代碼中,即只存在于開發環境,因此把他歸類為"開發依賴",安裝時執行npm install gulp-htmlmin --save-dev它就會被記錄在package.json的devependencies下,當進行代碼打包時,不會將這里的gulp-htmlmin插件原始碼打包入我們的專案代碼中
**devDependencies只會在開發環境下使用,生產環境不會被打入包內;而dependencies不僅在開發環境中要使用,生產環境也需要使用到,**根據以上規則,我們就很容易區分哪些插件是用–save-dev模式安裝,哪些用–save模式安裝,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/297454.html
標籤:其他
