npm入門(一)—瞭解基本組成與概念

前言

npm做爲開發的一個經常使用的工具,在使用的時候,固然能夠駕輕就熟,可是有時候真的問本身,到底有多瞭解這個經常使用的工具,其實也是以爲有點心虛,有種「只會用但不瞭解」的感覺。固然這並不會影響個人開發和使用,可是總以爲不去認真梳理一下,有種罪惡感。node

所以,就梳理一下本身的知識吧,你們要辯證地看待,我也是儘可能負責任地描述正確的觀點,若有誤解,務必告訴鄙人,我也想學習更多瞭解更多git

簡單知道npm

npm,是node package manager的縮寫,從名稱上理解,node 包管理器。npm的背後,是有一個軟件註冊中心(registry,下面解釋到),理解爲一個數據庫,詳細記錄了每一個包(package)的信息,包括做者、版本、依賴、受權信息等。來自各個大陸的開源開發人員使用npm來共享和借用包,許多組織也使用npm來管理私有開發。github

從做用上認識:web

NPM是隨同NodeJS一塊兒安裝的包管理工具,能解決NodeJS代碼部署上的不少問題。數據庫

  • 容許用戶從NPM服務器下載別人編寫的第三方包到本地使用。
  • 容許用戶從NPM服務器下載並安裝別人編寫的命令行程序到本地使用。
  • 容許用戶將本身編寫的包或命令行程序上傳到NPM服務器供別人使用。

若是我換種說法的話,就好像,你下載使用別人的類庫,以及你本身封裝類庫上傳給別人使用差很少吧npm

從官方上定義上理解,能夠大致上從三部分去認識它:json

  • the website
  • the Command Line Interface (CLI)
  • the registry
  • package

website

npm有個著名的 網站,在這個網站上,能夠尋找和了解包的狀況,找到合適本身使用的工具資源等。使用該網站來發現包、設置配置文件和管理npm體驗的其餘方面windows

CLI

從名字上就能知道了,就是命令行接口。說白了就是用來與npm進行交互的輸入的命令腳本bash

the registry

從中文上理解,能夠理解爲註冊表,註冊中心,或者npm註冊源,它是一個大型的JavaScript軟件公共數據庫。每一個包由軟件和元數據組成。開源開發人員和公司的開發人員使用npm registry向整個社區或其組織的成員提供包,並下載包用於本身的項目。服務器

package

上面三點都說起到一個概念——package(中文翻譯過來就包啦,因此咱們通俗地稱呼它爲包),那實際上它是個什麼東西呢?撇開官腔話解釋,咱們能夠通俗點去理解一下,它是一個軟件工具,是一個類庫,是一份組織好的代碼,它提供出來使用,或者是開發者本身整理好這份代碼,那就須要包裝好它整理好它,很形象地稱之爲pacakge。

簡單來講,就是打包好一份代碼啦。

那官方一點講,package(包)是一個文件或者文件夾,它包含一個名叫package.json的文件,由它來描述包的信息,以便發佈到npm registry

從用途上理解,例如我有一些封裝好的工具、函數,或者框架類庫,想要多人維護它的話,就要打包出來發佈到一個線上的地方(registry),別人能夠用來下載來,而後共同維護開發。或者也是單純的想要提供給別人使用,也須要打包出來吧,造成一份獨立的文件,這就是package的含義了。

關於pacakge的概念認知,先到這裏,你們先去知道這麼一個東西,關於它的更多內容,下一篇會進行詳細介紹。

小結

實際上,npm就是圍繞這package來進行一系列管理操做,它提供了一個地方存放這些包信息(registry),並提供一些命令(CLI)來讓用戶去管理pacakge。而咱們怎麼知道這些包的信息或者去尋找他呢,就是去 網站 裏瞭解了。

擁有你的npm帳號

要使用npm進行開發,首先得擁有一個npm帳號,這樣方便你在npm圈子裏進行活動。

前往 login page

界面操做我相信聰明的你確定會了,那簡單說一下一些註冊信息,方便更好的填寫

  • Full name: 顧名思義,就是你的全名啦
  • Public email:你的公共電子郵件地址將被添加到包的元數據中,並對下載你的包的任何人可見。當你更新包時,咱們也會發送電子郵件到這個賬戶,以及偶爾的產品更新和信息。
  • Username: 用戶名,當您在npmjs.com上發佈包或與其餘npm用戶交互時將顯示的用戶名。您的用戶名必須小寫,而且能夠包含連字符和數字。
  • Password:密碼

npm帳號分爲兩種,一個是免費用戶,一個是付費用戶。前者發佈的包和使用的包都是面對大衆的,公用的。後者是能夠發佈本身私有的npm包或建立一個組織(企業等),容許發佈組織私有包和使用一些私有的包

npm登陸

默認地,運行一下命令,就會在你默認設置的registry裏進行登陸,沒有更改過默認設置就是在http://registry.npmjs.org(後面有詳細說明):

npm login
複製代碼

接下來會提示你輸入你的信息,按照你註冊的信息輸入便可

登陸成功後,能夠檢查一下,運行

npm whoami
複製代碼

接着會輸出如今登陸的帳號用戶名

配置本地npm環境

npm的使用是基於nodejs的環境下的,所以須要在你的電腦上安裝nodejs。安裝的途徑有兩個

  1. 使用版本管理器下載安裝
  2. 使用安裝包直接下載安裝

固然咱們強烈是建議使用第一種方式,這樣的話,在你後續須要對你的應用進行各個版本測試時方便切換node版本和npm版本,以及你須要同時負責好幾個項目,而這幾個項目須要用到不一樣版本的npm時進行切換開發。

儘管你當前沒有這種需求,可是爲了後續以防萬一,仍是使用第一種方式比較好。

使用版本管理器下載安裝

針對不一樣系統的用戶,採用不一樣的版本管理器應用

針對OSX 或 Linux

Windows

使用安裝包直接下載安裝

前往 官網 選擇對應的版本進行下載,建議選擇有LTS(long term support)標記的版本,顧名思義,有這種標記的版本是被長期維護支持的,可靠性比較高

若是你是使用Linux的,建議使用 NodeSource installer 進行安裝

npm版本

在咱們下載安裝好nodejs後,其實npm也相應的自動已經安裝好了,下載不一樣版本的nodejs就會有不一樣版本的npm,可是npm版本的迭代速度要比nodejs的快,因此,你要確認一下安裝的npm版本是不是你想要的。

在命令行工具中運行 npm -v ,查看當前的npm版本。

在命令行工具中運行 node -v ,查看當前的nodejs版本。

latest release & next release

若是你想要把npm更新到新版本,能夠先了解一下這兩個版本的區別

latest release

最新的穩定版本。是已經發布了的。 運行如下命令便可

npm install npm@latest

next release

npm的最新未發佈版本,最終做爲最新版本發佈。通常是你想在發佈前就使用即將的新版本進行測試時。運行如下命令便可

npm install npm@next

設置npm registry

npm registry,咱們常說的npm源,常見的是說使用淘寶源。爲何須要設置這個東西?默認地,咱們發佈的公共包,是發到http://registry.npmjs.org上,別人搜索進行下載資源也是基於這個資源庫。可是有些時候,你下載的資源須要從別處來下,例如使用淘寶源,會是下載更順暢速度更快,更多時候,當你須要下載的公司的私有資源時,就須要設置對應的公司資源所在地址。所以,咱們常會遇到一個問題,我如何設置這個地址,即npm registry

設置默認registry

這方法簡單粗暴,直接把你的npm registry設置一個默認的註冊地址

npm config set registry xxx
複製代碼

xxx爲你想要的註冊地址

利用npmrc工具分狀況使用默認註冊地址

有時候在不一樣項目裏,須要採用不一樣的registry地址來進行npm包的處理,例如項目A須要用源A,項目B須要用源B。

這時候咱們可使用 npmrc 這個工具來管理。

先了解下該工具的一些簡單的命令

npmrc   // 列出全部的profiles
npmrc [name]    // 切換profile,支持模糊匹配
npmrc -c [name] // 建立新profile,並命名爲[name]
複製代碼

1)要使用該工具,首先就得要安裝

注意:這跟.npmrc文件是不一樣的,這裏是一個npm包工具

運行如下命令進行全局安裝

npm i npmrc -g
複製代碼

2)新建profile

npmrc -c projectA
複製代碼

新建了一個名叫projectA的profile

3)設置該profile下的npm registry

命令跟設置默認註冊源是同樣的

npm config set registry xxxxA
複製代碼

就是這麼簡單的三步,就能劃分出了一個profile,對其設置該registry,同理按照以上第二步和第三部,再新建一個profileB,和設置源B。這時候就會有兩個profile,有其對應的源。 這時候,咱們就能夠根據項目的須要,切換到不一樣的profile下,就能自動使用對應的註冊源了。

4)切換profile

npmrc projectB
複製代碼

例如上述命令,切換到了另外一個名叫projectB的profile上

爲npm包設置域,針對域設置不一樣registry

前面兩個解決方案,都能解決不一樣項目下使用不一樣的npm registry,可是他們是單獨的一個項目下的npm資源統一使用一個npm registry,那萬一是一個項目下的資源要是分別使用不一樣的npm registry呢?上面的兩個方案就有點力不從心了。

這時候,咱們能夠對npm包進行分域,一個域下的資源使用一個registry。

設置域

咱們在進行安裝npm包時,就能夠設置該包所在的域了。例如

npm install @myscope/packageName
複製代碼

從這行命令來看,就是下載安裝一個名叫packageName的npm包,放在了node_modules文件夾下的myscope文件下。這裏的用myscope就是該包所在的域的名字,@爲域的一個使用標識。

設置了以後在package.json文件裏也能夠看到,已經加上了這麼一個域名,在例如使用nodejs的require()引用文件時,也是要帶上這個@域名的。畢竟文件是在這個文件夾下的

by the way,設置域除了爲了設置不一樣registry的目的外,還能夠用來避免和其它包重名,避免衝突。

設置域的registry

對包進行分好域後,就要設置該域下的npm包採用哪一個registry來進行管理資源了。 運行

npm login --registry=xxxx --scope=@myscope
複製代碼

或者

npm config set @myscope:registry xxxx
複製代碼

這樣一來,咱們就對名叫myscope的域設置了xxx的registry地址了。以後在處理這些包的時候,就會使用該註冊地址。未設置的,仍是用回以前默認的地址。

登陸不一樣registry

上面介紹了設置不一樣registry,那麼咱們怎麼按照需求登陸上不一樣的registry,而後進行不一樣的管理呢?

默認登陸

運行npm login就會在當前設置的默認registry下進行登陸

指定registry登陸

1)使用npmrc工具

若是使用了npmrc工具,能夠npmrc profilename切換到默認指定了registry的profile下,而後運行npm login登陸便可

2)直接指定登陸

運行npm login --registry=xxxx

相關文章
相關標籤/搜索