[npm]Hello~ Package.json

  • 2566
  • 0
  • 2016-03-05

摘要:簡單介紹npm的使用,以及package.json的好用功能

npm(Node Package Manager)是基於Node.js的Package管理程式,可以用來安裝及卸除許多使用Javascript寫的Package。目前安裝npm很簡單,只需要到node.js官網下載並安裝node.js,npm也會隨著一起安裝。這篇文章是基本的使用筆記,想更清楚的了解npm的使用方式,可以參考這篇-nodejs-tw/NPM套件管理工具

 

 

npm的基本功能


npm的指令都是在CommandLine中執行,底下是常用的命令

  • npm -v  => 列出npm目前的版本
  • npm install  =>  安裝package
  • npm uninstall => 移除package
  • npm update =>  更新package
  • npm install -g => 全域安裝
  • npm install --save => 安裝後寫在package.json的dependence中
  • npm install --save-dev=> 安裝後寫在package.json的devDependence中
  • npm help => 查詢可用指令

 

使用Package.json

Package.json是npm的設定檔,裡面列出專案中使用到的Package。Package.json可以自行編輯,當執行npm的command,例如npm install --save時,npm也會把當下安裝的Package的名字及版本寫到Package.json中。底下是一個簡單的Package.json檔Sample


{
    "name": "application-name"
  , "version": "0.0.1"
  , "private": true
  , "dependencies": {
      "express": "2.5.5"
    , "coffee-script": "latest"
    , "mongoose": ">= 2.5.3"
  }
  , "devDependencies": {
      "browserify": "^10.2.4"
  }
}

使用Package.json當作管理Package的工具是很方便的,只要在裡面的dependencies區塊中寫好要安裝的package。再執行npm install,就可以一次把要安裝的Package安裝完成。另外devDependencies區塊是定義開發當中會用到的package,例如browserify

設定版本別有特定的寫法,以管理版本的相依性。其Sample如下:

  • "express": "2.5.1"       => 只能使用2.5.1的版本
  • "express": "latest"      => 使用最新版本(每次更新都會檢查是否有新版本)
  • "express": ">= 2.5.1" => 所有比2.5.1還新的版本
  • "express": “~2.5.1"    => 所有比2.5.1還新的2.5.x的版本,但不會到2.6.0
  • "express": “^2.5.1"    => 所有比2.5.1還新的2.x.x的版本,但不會到3.0.0

 

Visual Studio的支援

面對前端的浪潮,Microsoft也開始注意到這方面的需求。VS2015大量的支援 bower, gulp, grunt就是最好的證明,所以npm當然可以很方便的使用。VS2015中直接打開Package.json,就會有Intellisense可以帶出版本號,以及相關功能。只要按下儲存,就會自動安裝Package,連下npm install的指令都不需要打。

 

至於Visual Studio 2013,則可以使用這個Extension - Package Intellisense,下圖是其功能的展示

 
使用Package.json進行bundle或壓縮等Task管理

開發前端程式的過程中,有些Task需要處理,例如需要透過browserify進行bundle,或是寫React需要轉換JSX檔,或是使用watchify自動監控檔案異動。這些任務管理,目前有好用的gulp, grunt可以處理。但如果只是很簡單的一兩個Task,例如使用browserify,其實透過Package.json就可以做到了。

關鍵點是在Package.json的scripts這個區塊中,寫好要執行的command line命令。如下圖的Sample


"scripts": {
    "build-js": "browserify browser/main.js | uglifyjs -mc > static/bundle.js",
    "build-css": "cat static/pages/*.css tabs/*/*.css",
    "build": "npm run build-js && npm run build-css",
    "watch-js": "watchify browser/main.js -o static/bundle.js -dv",
    "watch-css": "catw static/pages/*.css tabs/*/*.css -o static/bundle.css -v",
    "watch": "npm run watch-js & npm run watch-css",
    "start": "node server.js",
    "test": "dir"
  }

這樣,就可以在command line下指令 - npm run以執行想要執行的Task

例如上例中下指令 - npm run test,就等於在command line下dir的指令

另外,也可以依序執行多個task。例如上例中有build-jsbuild-css這兩個task,可以透過 && 將兩個task連結起來,放到build這個task中。所以下指令npm run build就可以執行build-jsbuild-css這兩個task了。