使用NPM

Nodejs生態圈很強大,第一個緣由就是NPM,由於全球有無數的程序員在NPM中貢獻了本身的力量。node

爲了不造輪子,咱們有時候會用到其餘人的勞動成果,好比一些優秀的框架,好比Express,咱們直接使用NPM下載下來就能夠用了,下降開發成本和時間。webpack

安裝

安裝好nodejs後就安裝好了npm,這時系統自帶npm命令git

如何使用

覺得Express來舉例。
npm 的官網能夠找到 npm 包。
https://www.npmjs.com/
例如搜索Express,就會告訴你安裝方法和使用方法:
clipboard.png程序員

安裝Express

新建一個文件夾,而後運行:
npm init初始化,一直按回車,它會自動生成package.json 文件,這個後面再說這個文件的做用。
而後
npm install express安裝es6

會出現node_modules文件夾
clipboard.pnggithub

node_modules文件夾就是全部包安裝的位置。
express已經安裝到了node_modules文件夾,其餘的不少文件都是這個express依賴的包web

package.json 文件

咱們寫一個項目的時候可能會用到不少不少包,這些包多是一些工具,也多是框架。咱們每使用一個包,就會把這些包下載下來,而後他會放到node_modules目錄中。
那麼項目若是太大,哪些包安裝了哪些沒安裝,咱們如何知道呢?有沒有一個機制來記住咱們安裝的包呢?
有,nodejs提供了一個機制叫package.json
他是一個文件,他能夠記住全部安裝的包的信息,包括名稱、版本信息。
若是咱們遷移項目,咱們就可以知道安裝了什麼包。由於node_modules目錄中文件比較大,並且不放在版本控制中(github等),也不是源碼的一部分,咱們只要知道node_modules裏安裝的一些包的名字就能夠了,根本不須要這個目錄的內容。express

好比說如今一個同事獲得了這一份代碼,那麼這個node_modules目錄中的代碼他是不須要的。由於他只須要安裝過得這些包的名稱就能夠了,到他本身的電腦上再安裝就能夠了。npm

package.json就是記錄全部安裝的包的信息的文件。json

生成方法

運行npm init初始化一個項目。
他會讓你回答一些關於這個項目的信息,一直按回車,由於這些信息後面能夠改,最開始使用默認的就好。

clipboard.png

而後就會生成一個package.json的文件。

clipboard.png

舉例:嘗試安裝Express並查看package.json

npm install --save express

clipboard.png

安裝以後出現不少包,這些都是express依賴的包。

"dependencies"

clipboard.png

安裝後出dependencies字段會出現安裝的包的詳細信息,包括包的名稱和版本號。
"dependencies"中文是依賴的意思。

"devDependencies"

devDependencies是開發環境依賴的意思。例如咱們用下面的命令行安裝gulp
npm install --save-dev gulp

clipboard.png

開發環境的包會記錄在這裏
使用--save-dev就是開發環境依賴的一些包,會記錄到devDependencies

"scripts"中的"start"

在"scripts"里加入一行"start": "node app.js",

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node app.js"
  },

那麼若是咱們運行npm run start

clipboard.png

就會運行"start"裏面的命令。

做用:別人下載你的代碼以後可能不知道怎麼運行你的項目,那麼你把這些命令寫在start裏,那麼項目入口文件之類的就一目瞭然。

使用package.json 命令:npm install

package.json記錄了安裝包的全部安裝信息,那麼別人獲得這些信息如何把這些包安裝下來呢(安裝到他的本地
使用命令npm install就能夠了,好比咱們如今刪掉node_modules,而後再運行npm install
他就會從新安裝

"dependencies": {
    "express": "^4.16.4"
  },
  "devDependencies": {
    "gulp": "^3.9.1"
  }

這兩個依賴中的包

全局安裝與局部安裝的區別

全局安裝

好比咱們安裝webpack
npm install -g webpack
-g 意思是Global,全局的意思,他會把webpack做爲一個命令,一個可執行文件,安裝到咱們的系統中,之後咱們就可使用這個命令了
clipboard.png

局部安裝

局部安裝只安裝到這個項目當前的文件夾中,若是想使用webpack命令,就要運行使用當前項目下的文件,才能運行webpack
node_modules/.bin/webpack

Babel舉例說明

用Babel舉例說明全局安裝與局部安裝的區別:

命令行轉碼babel-cli————阮一峯的es6教程
clipboard.png

上面代碼是在 全局環境下,進行 Babel 轉碼。這意味着,若是項目要運行, 全局環境必須有Babel,也就是說 項目產生了對環境的依賴。另外一方面,這樣作也 沒法支持不一樣項目使用不一樣版本的 Babel

一個解決辦法是將babel-cli安裝在項目之中。

總結:全局安裝的話你的項目不容易更新,由於不一樣項目使用的babel的版本可能不一樣,並且你和你團隊使用的babel的版本也可能不一樣。因此要把babel直接安裝在項目中。這樣其餘人拿到項目再安裝項目內的babel,就不會出現版本不兼容問題了。

http-server舉例說明

再好比咱們安裝http-server
npm install -g http-server

clipboard.png
安裝在了這個目錄下新增的一個文件,叫作http-server

clipboard.png

npm install -g的時候安裝在全局目錄下,npm install不帶-g的時候安裝在當前目錄下,如圖

clipboard.png

若是是全局安裝,那麼直接就能夠用了,由於Mac中 /usr/local/bin 是包含在path裏面的。

clipboard.png

若是我直接在命令行裏輸入http-server,那麼會訪問到/usr/local/bin這個路徑裏的http-server文件

若是隻安裝在了局部的項目裏,想用的話就去當前目錄下去找http-server這個文件,同樣能夠用:

clipboard.png
命令行的實質就是一個文件而已!全局命令就是裝在環境裏的文件!局部命令就是放在一個目錄裏,用的時候須要執行局部文件

切換淘寶源

注意:在國內安裝這些包的時候有時候會很慢,由於這些包的服務器在國外。咱們能夠換一個源,即把服務器換到國內,例如淘寶的源

運行下面的命令便可切換淘寶源

npm config set registry https://registry.npm.taobao.org/
npm config set loglevel http
npm config set progress false

npm 的配置被存儲在 ~/.npmrc,你能夠隨時改。

這是官方網站
https://npm.taobao.org/

安裝node-sass的正確姿式

安裝node-sass的正確姿式

從 npm 到全面擁抱 yarn

從 npm 到全面擁抱 yarn

我的以爲 yarn 有如下好處:

  1. 超快的下載速度。
  2. 離線下載,若是你懂 ruby,這個有點像 bundle,就是以前下載過一次,這個包就會放到電腦上的一個地方,下次別的項目要使用同一個包的時候就不用下載了,而是作一個連接,這樣速度超級快,這一點很重要,npm 飽受詬病的一點就是,每次安裝依賴,都須要從網絡下載一大堆東西,並且是所有從新下載。工程多的時候比較煩人。這下子能夠節約大量時間了。
  3. 擁有 lockfile 文件,在 yarn 中叫 yarn.lock,這個在新版的 npm 也有這個功能,它的文件名叫 package-lock.json,這個文件會記錄每次安裝的包的版本的精確信息,這樣,每次運行 yarn install 就會獲得如出一轍的依賴環境,而不是會出現個別包的版本不一樣,從而引起環境問題致使項目運行狀況不一樣的尷尬事件。

安裝方法、使用方法、切換源等見連接

相關文章
相關標籤/搜索