【原】nodejs全局安裝和本地安裝的區別

來微信支付有2年多了,從2年前的互聯網模式轉變爲O2O模式,主要的場景是跟線下的商戶去打交道,不像以往的互聯網模式,有產品經理提需求,咱們幫忙去解決問題。html

轉型後是這樣的,團隊成員更多須要去尋找業務的方向,思考能爲商戶或者業務作點什麼來體現其身價值,這樣的轉變是機會也是挑戰,我一直相信在特別的環境下能迅速磨練出了跨崗位技能和綜合素質,然而一路走來也發現了本身的短板(所謂的產品思惟),並不是想提高就能夠,有時候感到本身很無能。node

因而這樣熬過來,暗示本身保持積極樂觀的心態,平時使用一些通用的方法來提醒本身,如多問本身爲何這樣作,給本身定製一些小的目標等,心態好、思惟清晰、目標明確。git

雖然沒有得到多大的成就,但必須看到本身在進步,除了技術進步外,關鍵仍是自身的思想進步,本事長在本身身上,沒有人搶得走。github

 

進入正文~npm

 

上一篇文章《npm 經常使用命令詳解》主要是整理了最常使用的npm命令及相關介紹,其中有提到全局安裝(npm install gulp -g)和本地安裝(npm install gulp),下圖來自Gulp中文網入門指南,能夠看出全局安裝後gulp後還要進行本地安裝,一開始我疑惑了?爲何全局安裝的gulp麼,還要進行本地安裝,難道不能在項目中直接調用本地安裝的包?json

帶着疑惑,在google找了相關文檔,雜七雜八湊合起來纔有了點眉目,讓咱們一塊兒解開nodejs全局安裝和本地安裝的一些疑惑,若是有講錯的地方,還請你們留意指正。gulp

本文以Windows平臺上作測試,以gulp爲示例作教程微信

目錄

 

什麼是全局安裝(global)

安裝位置

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

調用方式

全局安裝後能夠供命令行(command line)使用,用戶能夠在命令行中直接運行該組件包支持的命令,以下圖全局安裝gulp後的cmd文件微信支付

什麼是本地安裝(local)

安裝位置

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

調用方式

本地安裝後能夠直接經過require()的方式引入項目中node_modules目錄下的模塊,以下示例,本地安裝後直接在gulpfile.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.一、gulp@3.9.1...,爲了區別不一樣項目使用指定的包,保證模塊之間的相互依賴(這塊下面會介紹),區別每一個項目正常運行。

所以,不推薦只全局安裝。

本地安裝的重要性

最先的node.js/npm其實是全局的,包括如今還兼容NODE_PATH,可是不能支持全局多版本,因而nodejs團隊改爲本地安裝的方法可能就是爲了保證不一樣版本包之間的相互依賴,什麼意思呢,舉個例子weui組件中相互依賴的包就有12個

其中依賴包的指定版本號以下,不可輕易去修改,由於不一樣版本包對應依賴包的版本的功能有所差異,若是修改指定的版原本運行weui,就可能會編譯出錯等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,你還會在乎節省這點空間嗎?

 

參考資料:

Why do we need to install gulp globally and locally?

npm 1.0: Global vs Local installation

Skip local installation of Gulp

爲何 npm 要爲每一個項目單獨安裝一遍 node_modules?

Windows系統下nodejs安裝及配置

相關文章
相關標籤/搜索