天天看點

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

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

轉型後是這樣的,團隊成員更多需要去尋找業務的方向,思考能為商戶或者業務做點什麼來展現其身價值,這樣的轉變是機會也是挑戰,我一直相信在特别的環境下能迅速磨練出了跨崗位技能和綜合素質,然而一路走來也發現了自己的短闆(所謂的産品思維),并非想提升就可以,有時候感到自己很無能。

于是這樣熬過來,暗示自己保持積極樂觀的心态,平時使用一些通用的方法來提醒自己,如多問自己為什麼這樣做,給自己定制一些小的目标等,心态好、思維清晰、目标明确。

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

進入正文~

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

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

帶着疑惑,在google找了相關文檔,雜七雜八湊合起來才有了點眉目,讓我們一起解開nodejs全局安裝和本地安裝的一些疑惑,如果有講錯的地方,還請大家留意指正。

本文以Windows平台上做測試,以gulp為示例做教程

目錄

  • 什麼是全局安裝(global)
  • 什麼是本地安裝(local)
  • 為什麼全局安裝後還要本地安裝
    • 僅全局安裝足夠嗎
    • 本地安裝的重要特性

安裝位置

全局安裝方式是鍵入指令:npm install gulp -g 或 npm install gulp --global,其中參數-g的含義是代表安裝到全局環境裡面,包安裝在Node安裝目錄下的node_modules檔案夾中,一般在 \Users\使用者名\AppData\Roaming\ 目錄下,可以使用npm root -g檢視全局安裝目錄。

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

調用方式

全局安裝後可以供指令行(command line)使用,使用者可以在指令行中直接運作該元件包支援的指令,如下圖全局安裝gulp後的cmd檔案

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

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

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

本地安裝後可以直接通過require()的方式引入項目中node_modules目錄下的子產品,如下示例,本地安裝後直接在gulpfile.js中require('gulp')。

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

1.在js執行個體代碼中,預設下node.js會在NODE_PATH和目前js所在項目下的node_modules檔案夾下去尋找子產品,是以,如果隻是全局安裝,不能直接通過require()的方式去引用子產品,需要手動解決包路徑的配置問題,當然你也可以複制全局安裝的node_modules檔案夾到項目下,還有辦法可以選擇将環境變量的NODE_PATH設定為C:\Program Files\nodejs。

2.對于包的更新不好管理,可能你需要為每個包重新命名,如[email protected][email protected]...,為了差別不同項目使用指定的包,保證子產品之間的互相依賴(這塊下面會介紹),差別每個項目正常運作。

是以,不推薦隻全局安裝。

本地安裝的重要性

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

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

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

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

再舉個例子:

包版本為:

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安裝及配置

作者:白樹

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

您覺得本文不錯,可打賞部落客,或點選右下角【好文要頂】支援部落客。

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

很多人在看的文章

《pageResponse - 讓H5适配移動裝置全家》

《移動web資源整理》

《移動web點5像素的秘密》

《移動web使用css3實作跑步》

《移動web頁面使用字型的思考》

《高清顯示屏原理及設計方案》

《css實作兩端對齊的3種方法》

我要贊個

我要評論

我要收藏

傳回頂部

跳到底部

下一篇: lamp一鍵安裝

繼續閱讀