包管理工具之一——npm

基於node工程

  • 包(項目,工程)

    • 概念
    • 1、在Node.js語言中,包和模塊並沒有本質的不同,包是在模塊的基礎上更深一步的抽象。
    • 2、包將某個獨立的功能封裝起來,用於發佈、更新、依賴管理和進行版本控制。
    • 3、Node.js根據 CommonJS 規範實現了包機制,開發了 npm 來解決包的發佈和獲取需求。
  • 包的說明文件(package.json)

    • 使用package.json能幹什麼
      • 1、相當於你本地項目的一個文檔說明。
      • 2、允許你指定你項目中所使用的node包的版本。
      • 3、構建你的項目更加容易,便於給其他人共享。
  • package.json屬性詳解

    • 本質:json對象
    {
      "name": "npm_command", //包名
      "version": "1.0.0", //版本
      "scripts": { //配置npm運行命令
        "start": "node bin/www"
      },
      "dependencies": {//運行依賴的包
        "jquery": "^3.2.1"
      },
      "devDependencies": {//開發依賴的包
        "babel": "^6.23.0"
      }
    }
    
    • 擴展:
    "jquery": "^3.2.1" -----向上的尖括號可以管理二級,三級版本
    "jquery": "~3.2.1" -----波浪線可以管理三級版本。
    

npm簡介(包管理工具)

  • 1、Node包管理器(npm)是一個由Node.js官方提供的第三方包管理工具,
  • 2、npm是一個完全由JavaScript 實現的命令行工具,通過Node.js執行,因此嚴格來講它不屬於Node.js的一部分。
  • 3、在最初的版本中,我們需要在安裝完Node.js以後手動安裝npm,但從Node.js 0.6開始,npm已包含在發行包中了,安裝Node.js時會自動安裝npm。現在的版本大都使用6.0以上。
  • NPM是隨同NodeJS一起安裝的包管理工具,能解決NodeJS代碼部署上的很多問題,常見的使用場景有以下幾種:
    • 允許用戶從NPM服務器下載別人編寫的第三方包到本地使用。
    • 允許用戶從NPM服務器下載並安裝別人編寫的命令行程序到本地使用。
    • 允許用戶將自己編寫的包或命令行程序上傳到NPM服務器供別人使用。
  • 查看npm是否安裝成功$ npm -v

npm命令詳解

  • 使用npm命令來下載依賴模塊及對項目包(模塊)進行管理
  • 常用命令:
    • npm init: 生成package.json
    • npm install:用來安裝package.json裏的相關依賴包
    • npm install packageName -g(全局安裝packageName)
    • npm install packageName --save 安裝包(局部安裝packageName—運行依賴)
    • npm install packageName@version --save 安裝指定版本的包(局部安裝)
    • npm install packageName --save-dev(局部安裝–開發依賴)
    • npm info packageName (顯示包的信息)
    • npm rm packageName (移除包)
    • npm config get prefix (獲取全局安裝包的所在地址,並且可見對應的cmd命令)

npm link

  • link相關文檔
  • 背景:我們假設項目是 my-project, 需要用到一個獨立的 my-utils 模塊。新開發或修改的 my-utils 模塊,如何在項目中試驗?
    • 發佈一個 beta 版本
      • 優點:你高興就好。
      • 缺點: 無趣+無趣+無趣,麻煩+麻煩+麻煩。
    • 使用相對路徑安裝
    $ cd path/to/my-project
    $ npm install path/to/my-utils
    
      - 優點:簡單明瞭
      - 缺點: 調試過程中往往需要微調,此時需要切換到 my-utils 目錄修改,然後反覆重新 install,很麻煩;
    
    • 使用軟鏈
    $ cd path/to/my-project/node_modules
    $ ln -s path/to/my-utils my-utils
    
      - 優點:軟鏈後,兩邊修改直接同步;
      - 缺點: 指令操作麻煩,不同操作系統語法不一樣;
    
  • npm link功能:在本地開發npm模塊的時候,我們可以使用npm link命令,將npm 模塊鏈接到對應的運行項目中去,方便地對模塊進行調試和測試;
  • 基本方法
$ cd path/to/my-project
$ npm link path/to/my-utils
  • 如果這兩個目錄不在一起,操作方法
$ # 先去到模塊目錄,把它 link 到全局
$ cd path/to/my-utils
$ npm link
$
$ # 再去項目目錄通過包名來 link
$ cd path/to/my-project
$ npm link my-utils

鏡像問題

  • 使用npm導致的問題(更多的是針對5.0以下版本)
    • 下載慢
    • 甚至下載不了

cnpm(淘寶鏡像)

  • 將npm上的包同步更新到淘寶鏡像上,目前是每10分鐘同步一次。
  • 配置:npm install -g cnpm --registry=https://registry.npm.taobao.org
  • 修改倉庫地址爲npm地址:npm config set registry https://registry.npmjs.org/
  • 常用命令:使用 cnpm 代替 npm 即可
  • 問題:
    • 會多下載一些文件/文件夾
    • 嚴重者會導致 webstorm 癱瘓,就像帕金森綜合徵
  • 解決上述問題的辦法

npm轉換國內鏡像

  • npm是一個很好用的工具,全名是Node Packet Manager,是一個nodejs的包管理工具,但是美中不足的是當我們去安轉包的時候卻發現下載的速度太慢,但是沒關係,還是有方法的就是利用淘寶的國內鏡像,一下是3個設置的方法:

  • 鏡像使用方法(三種辦法任意一種都能解決問題,建議使用第三種,將配置寫死,下次用的時候配置還在):

    • 1.通過config命令
    npm config set registry https://registry.npm.taobao.org 
    npm info underscore (如果上面配置正確這個命令會有字符串response)
    
    • 2.命令行指定npm --registry https://registry.npm.taobao.org info underscore
    • 3.編輯 ~/.npmrc 加入下面內容registry = https://registry.npm.taobao.org
  • 下載vue-cli之後,使用vue提醒vue不是全局變量;

    • 解決方法:將vue.cmd的文件找到之後,複製該路徑,添加到環境變量Path中;

##補充擴展

  • 2017年5月30日發佈node 8.0,其中自帶的npm也由3.xxx版本升級到5.0
  • npm5變化:
    • 通過npm下載包的時候多了一個package.lock.json
    • package.lock.json可以記錄整個node-modules中文件夾的樹狀結構,再次下載的時候不用先去讀取包與包之間相關依賴
      • 大白話:就是記錄包與包之間的關聯(依賴關係)
      • 好處:再次npm install下載的時候不用去先讀取依賴可以直接下載,速度較快。
    • 可以利用離線緩存,合理的利用了緩存,提高了下載效率
    • 在速度上還是和yarn有些差異。
  • –save是一個默認屬性,npm install下載包的時候會在package.json裏顯示依賴
  • 注意:npm3和npm5並沒有完美對接
  • 如果之前的項目是用npm下載的包,當後期用npm下載其他包的時候之前的包的依賴是無法讀取到package.lock.json裏,導致之前的包無法使用,此時需要npm install重新下載。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章