NPM 實踐了 CommonJS 包規範規範,幫助咱們安裝和管理依賴包,使得 Node 項目的第三方模塊更加規範便捷,能夠在 NPM 平臺上找到全部共享的插件。vue
CommonJS 包規範的定義分爲兩部分:用於組織文件目錄的包結構和用於描述包信息的包描述文件 package.json。node
一個包由至關於一個存檔文件,可壓縮爲.zip
或tar.gz
,安裝時解壓還原。徹底符合 CommonJS 包規範的目錄包含如下文件:express
|-- .bin // 存放可執行的二進制文件 |-- lib // 存放 Javascript 文件 |-- doc // 存放文檔 |-- test // 存放單元測試用例 |-- package.json // 包描述文件
包描述文件 package.json 是一個 JSON 文件,在包的根目錄下。NPM 的全部行爲都與 package.json 中的字段有關,Node 程序的依賴項也體如今這些字段上。npm
CommonJS 包規範定義了 package.json 中的字段,NPM 實現時對 CommonJS 包規範中的字段也進行取捨和新增,經常使用字段有:json
require()
引入時優先檢查該字段。若是 main 字段不存在,Node 按照模塊文件定位的規則依次查找包目錄下的 index.js、index.node、index.json;npm install package_name -g
將包添加到執行路徑中,以後能夠「全局使用」。NPM 幫助 Node 完成第三方模塊的發佈、安裝和依賴。能夠直接執行$ npm
查看全部命令。segmentfault
使用$ npm init
能夠快速生成一個 package.json 文件。數組
使用 npm install
安裝依賴包是 NPM 最經常使用的功能,例如執行npm install express
後,npm 向 registry 查詢模塊壓縮包的網址,下載壓縮包後 NPM 會在當前的 node_module
目錄下建立 express 目錄,將包解壓還原在此。babel
registry 是 NPM 模塊倉庫提供了一個查詢服務,例如 npmjs.org 的查詢服務網址
https://registry.npmjs.org/ ,加模塊名
https://registry.npmjs.org/vue 就獲得包含 Vue 模塊全部版本的信息 JSON 對象,也可使用
$ npm view vue
查詢。
Node 項目使用require('express')
引入 express 模塊時,require()
方法在路徑分析時按照模塊路徑查找策略,沿當前路徑向上逐級查找node_module
目錄,最終定位到 express 目錄。工具
包的安裝和模塊引入是相輔相成的, 能夠進一步理解 Node 模塊加載原理
npm install
默認將包和 package.json 的依賴關係保存在dependencies
,但在能夠經過一些額外的標誌來控制它們的保存位置和方式:單元測試
-P
or --save
or --save-prod
: 依賴在dependencies
,默認值.-D
or --save-dev
: 依賴在 devDependencies
.-O
or --save-optional
: 依賴在 optionalDependencies
.--no-save
: 防止包依賴保存在 dependencies
.例如 npm install express -D
就會將 express 依賴關係保存在devDependencies
。
在npm install
一個模塊時常常糾結要安裝在devDependencies
仍是dependencies
,從字面意思看前者用於生產環境,後者用於開發環境。
在官方的定義中,若是環境變量 NODE_ENV 設置爲 production,執行 npm install --production
時 npm 會默認安裝dependencies
裏面的依賴項,不會去安裝devDependencies
裏的。而且推薦dependencies
裏配置正式運行時必須依賴的插件,devDependencies
一般用來放咱們開發或測試的工具,好比 Webpack,Gulp,babel,eslint等。
在實際開發過程當中,Node 包的安裝是依據 require/import 模塊機制,不管是-P
仍是-D
指令都會把依賴下載到 node_modules
文件夾,-P
仍是-D
只是修改了dependencies
對象,在安裝這個庫進行開發調試的時候,能夠經過npm install
一鍵安裝這兩個目錄下全部的依賴。
使用 -g
或 --global
能夠將包安裝爲「全局可用」,但須要注意的是,全局安裝並不意味將模塊包安裝爲一個全局包,也不是能夠在任何地方均可以require()
引入。
實際上-g
命令是將模塊包安裝在「全局」的node_module
中,即 Node 可執行文件相同的路徑下,並經過配置 bin 字段連接。
例如使用命令行查看 Node 可執行文件的位置:
$ which node /usr/local/bin/node
那麼全局安裝模塊的實際位置就是/usr/local/lib/node_modules
(在 Finder 中用 command+shift+G 快捷鍵訪問隱藏目錄 )
進一步瞭解 NPM 的使用能夠看 NPM DOCS,NPM更多命令 NPM CLI
繼續加油哦永遠十八歲的少女~