npm 全局安裝和局部安裝的區別


上圖是從網上找的webpack 安裝的步驟,我們看到除了要全局安裝之外,還需要本地安裝,那么這兩者有什么區別呢?
本文以Windows平台上做測試,以webpack為示例做教程

什么是全局安裝?

安裝位置

全局安裝方式是鍵入命令:npm install webpack -g 或 npm install webpack --global,其中參數-g的含義是代表安裝到全局環境里面,包安裝在Node安裝目錄下的node_modules文件夾中,一般在 \Users\用戶名\AppData\Roaming\ 目錄下,可以使用npm root -g查看全局安裝目錄。

 

 

調用方式

全局安裝后可以供命令行(command line)使用,用戶可以在命令行中直接運行該組件包支持的命令。

 

 

上圖列出了一部分關於webpack支持的命令行,如果不了解的話,可以使用 webpack -h 來查看它所支持的所有的命令;

什么是本地安裝?

安裝位置

本地安裝方式是鍵入命令:npm install webpack 或 npm install webpack --save-dev等,其中參數--save-dev的含義是代表把你的安裝包信息寫入package.json文件的devDependencies字段中,包安裝在指定項目的node_modules文件夾下。

 

 

調用方式

本地安裝后可以直接通過require()的方式引入項目中node_modules目錄下的模塊,如下示例,本地安裝后直接在webpack.config.js中require('gulp')。

 

 

為什么全局安裝還要本地安裝?

僅僅全局安裝夠嗎?

1.在js實例代碼中,默認下node.js會在NODE_PATH和目前js所在項目下的node_modules文件夾下去尋找模塊,因此,如果只是全局安裝,不能直接通過require()的方式去引用模塊,需要手動解決包路徑的配置問題,當然你也可以復制全局安裝的node_modules文件夾到項目下,還有辦法可以選擇將環境變量的NODE_PATH設置為C:\Program Files\nodejs。

2.對於包的更新不好管理,可能你需要為每個包重新命名,如gulp@3.8.1、gulp@3.9.1...,為了區別不同項目使用指定的包,保證模塊之間的相互依賴(這塊下面會介紹),區別每個項目正常運行。

因此,不推薦只全局安裝。

本地安裝的重要性

最早的node.js/npm實際上是全局的,包括現在還兼容NODE_PATH,但是不能支持全局多版本,於是nodejs團隊改成本地安裝的方法可能就是為了保證不同版本包之間的相互依賴,什么意思呢,舉個例子wpdemo組件中相互依賴的包就有很多個

 

 


其中依賴包的指定版本號如下,不可輕易去修改,因為不同版本包對應依賴包的版本的功能有所差別,如果修改指定的版本來運行wpdemo,就可能會編譯出錯等bug。

 

 

依賴

再舉個例子:

包版本為:A(0.0.1)依賴B(0.0.2),B(0.0.1)依賴C(0.0.3) 一段時間原作者更新后, 包版本為:A(1.0.1)依賴B(1.0.0),B(1.0.0)依賴C(1.0.0) 

每一次的更新可能帶來不一樣的功能,在多人合作、發布模塊到npmjs社區、上傳到github給其他人使用時,保留模塊的版本信息可用於下載指定的版本號顯得特別重要。
本地安裝可以讓每個項目擁有獨立的包,不受全局包的影響,方便項目的移動、復制、打包等,保證不同版本包之間的相互依賴,這些優點是全局安裝難以做到的。
另外,據node團隊介紹,本地安裝包對於項目的加載會更快。
有優點也少不了缺點,如每次新項目都要本地安裝所依賴的包,安裝包時間相對較長,一來是包太大導致下載慢;二是浪費了硬盤空間,不過現在電腦硬盤動不動就幾個T,你還會在意節省這點空間嗎?

 出處:http://peunzhang.cnblogs.com/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM