NPM你真的會嗎?(一)

什麼是NPM

npm是什麼東東?npm實際上是Node.js的包管理工具(package manager)。 爲啥咱們須要一個包管理工具呢?由於咱們在Node.js上開發時,會用到不少別人寫的JavaScript代碼。若是咱們要使用別人寫的某個包,每次都根據名稱搜索一下官方網站,下載代碼,解壓,script 引入,很是繁瑣。因而一個集中管理的工具應運而生:你們都把本身開發的模塊打包後放到npm官網上,若是要使用,直接經過npm安裝就能夠直接用,不用管代碼存在哪,應該從哪下載。 更重要的是,若是咱們要使用模塊A,而模塊A又依賴於模塊B,模塊B又依賴於模塊X和模塊Y,npm能夠根據依賴關係,把全部依賴的包都下載下來並管理起來。不然,靠咱們本身手動管理,確定既麻煩又容易出錯。前端

npm的歷史

在沒有npm的年代,你要去獲取一個模塊,或者一個框架你的方式是什麼?node

  • 獲取->JQ
  • 獲取->Boottrap
  • 獲取->Underscore

jQuery官網下載
咱們的GitHub

固然當時也是一個jQuery能夠走天下的時代 git

咱們程序員固然不能接受這種古老並且低效率的事情,咱們須要更加高效更加合理的代碼管理方式。
想一想其餘語言程序員

語言 包管理工具
Java maven
Python distribute、setuptools、distutils、easy_install、pip
PHP Composer

前端竟然沒有!不能容忍!在這個時候有我的站了出來
Isaac Z. Schlueter GitHub 下面簡稱(Issac)github

大體的實現思路

  • 找一個雲服務把全部的代碼都管理起來
  • 而後通知 jQuery、Bootstrap、等等這些框架的坐着做者使用 npm publish 把代碼提交到雲服務上,
  • 社區裏的其餘人若是想使用這些代碼,就能夠經過npm install 來下載這些代碼了。
  • 下載完的代碼出如今 node_modules 目錄裏,就能夠經過require引入進行使用了。

後續發展

Isaaz 通知 jQuery 做者 John Resig,他會答應嗎?不必定這仍是個未知數,可是仍是要去作。 只有前端開發工程師人人都知道有這個東西了纔會承認它對不對。 那npm是怎麼迅速在前端社區火爆起來的呢? npm 的發展是跟 Node.js 的發展相輔相成的。 Node.js 是由一個在德國工做的美國程序員 Ryan Dahl github地址 寫的。他寫了 Node.js,可是 Node.js 當時缺乏一個包管理器,因而他和 Isaaz 一拍即合、,最終 Node.js內置了npm。 後來的事情你們都知道,Node.js 火了。web

package.json

當咱們在一個空文件 npm init 初始化的時候這個文件就誕生了,express

我這裏找了express 的 package.jsonnpm

{
  "name": "express", // 包名
  "description": "Fast, unopinionated, minimalist web framework", // 包的描述
  "version": "4.13.3", // 包的版本號
  "author": { // 包的做者姓名
    "name": "TJ Holowaychuk",
    "email": "tj@vision-media.ca"
  },
  "contributors": [ // 包的其餘貢獻者姓名
    {
      "name": "Aaron Heckmann",
      "email": "aaron.heckmann+github@gmail.com"
    }
    // ...
  ],
  "license": "MIT", // 你應該爲你的模塊制定一個協議,讓用戶知道他們有何權限來使用你的模塊,以及使用該模塊有哪些限制。
  "repository": { // 包代碼存放的地方的類型,能夠是 git 或 svn,git 可在 Github 上。
    "type": "git",
    "url": "git+https://github.com/strongloop/express.git"
  },
  "homepage": "http://expressjs.com/", // 包的官網 url
  "keywords": [ // 關鍵字
    "express",
    "framework",
    "sinatra",
    "web",
    "rest",
    "restful",
    "router",
    "app",
    "api"
  ],
  "dependencies": { // 依賴包列表。若是依賴包沒有安裝,npm 會自動將依賴包安裝在 node_module 目錄下
    "accepts": "~1.2.12",
    // ...
  },
  "devDependencies": { // 開發環境的依賴包
    "after": "0.8.1",
    // ...
  },
  "engines": { // node版本範圍
    "node": ">= 0.10.0"
  },
  "files": [
    "LICENSE",
    "History.md",
    "Readme.md",
    "index.js",
    "lib/"
  ],
  "scripts": { // 項目的生命週期個各個環節須要執行的命令。key是生命週期中的事件,value是要執行的命令。
    "test": "mocha --require test/support/env --reporter spec --bail --check-leaks test/ test/acceptance/",
    "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/ test/acceptance/",
    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/",
    "test-tap": "mocha --require test/support/env --reporter tap --check-leaks test/ test/acceptance/"
  },
  "gitHead": "ef7ad681b245fba023843ce94f6bcb8e275bbb8e",
  "bugs": {
    "url": "https://github.com/strongloop/express/issues"
  },
  "_id": "express@4.13.3",
  "_shasum": "ddb2f1fb4502bf33598d2b032b037960ca6c80a3",
  "_from": "express@*",
  "_npmVersion": "1.4.28",
  "_npmUser": {
    "name": "dougwilson",
    "email": "doug@somethingdoug.com"
  },
  "maintainers": [
    {
      "name": "tjholowaychuk",
      "email": "tj@vision-media.ca"
    }
    // ...
  ],
  "dist": {
    "shasum": "ddb2f1fb4502bf33598d2b032b037960ca6c80a3",
    "tarball": "http://registry.npmjs.org/express/-/express-4.13.3.tgz"
  },
  "directories": {},
  "_resolved": "https://registry.npmjs.org/express/-/express-4.13.3.tgz",
  "readme": "ERROR: No README data found!"
}
複製代碼

那麼你下次若是有這個package.json 你就能夠直接下載安裝這些依賴包。包文件就會出如今node_modules裏面。json

常用的命令

全局安裝與本地安裝
不少朋友一開始並不知道 npm install -g 和不帶-g的區別,npm 的包安裝分爲本地安裝(local)、全局安裝(global)兩種api

npm install express          # 本地安裝
npm install express -g       # 全局安裝
複製代碼

本地安裝
一、將安裝包放在./node_modules 下(運行 npm 命令時所在的目錄),若是沒有 node_modules 目錄,會在當前執行 npm 命令的目錄下生成 node_modules 目錄
二、能夠經過 require() 來引入本地安裝的包。
全局安裝
一、將安裝包放在 /usr/local 下或者你 node 的安裝目錄
二、能夠直接在命令行裏使用

卸載模塊
既然能夠安裝那麼也會有卸載模塊的方式,

npm uninstall express
複製代碼

卸載完之後查看一下該模塊是否存在

npm ls
複製代碼

更新模塊

npm update express

複製代碼

更多知識咱們會在NPM你真的會嗎?(二)中來說解你們敬請期待。

相關文章
相關標籤/搜索