【Node】CommonJS 包規範與 NPM 包管理

NPM 實踐了 CommonJS 包規範規範,幫助咱們安裝和管理依賴包,使得 Node 項目的第三方模塊更加規範便捷,能夠在 NPM 平臺上找到全部共享的插件。vue

1、CommonJS 包規範

CommonJS 包規範的定義分爲兩部分:用於組織文件目錄的包結構和用於描述包信息的包描述文件 package.jsonnode

1.1 包結構

一個包由至關於一個存檔文件,可壓縮爲.ziptar.gz,安裝時解壓還原。徹底符合 CommonJS 包規範的目錄包含如下文件:express

|-- .bin  // 存放可執行的二進制文件
|-- lib   // 存放 Javascript 文件
|-- doc   // 存放文檔
|-- test  // 存放單元測試用例
|-- package.json  // 包描述文件

1.2 包描述文件

包描述文件 package.json 是一個 JSON 文件,在包的根目錄下。NPM 的全部行爲都與 package.json 中的字段有關,Node 程序的依賴項也體如今這些字段上。npm

CommonJS 包規範定義了 package.json 中的字段,NPM 實現時對 CommonJS 包規範中的字段也進行取捨和新增,經常使用字段有:json

  • name: 包名稱;
  • description: 包描述;
  • keyword: 關鍵字數組,用於 NPM 分類搜索;
  • repository: 代碼託管位置列表;
  • homepage: 當前包的網址;
  • bugs: 反饋 bug 的郵箱或網址;
  • dependencies: 使用當前包所須要的依賴包列表,NPM 根據這個屬性自動加載依賴;
  • devDependencies: 後續開發時須要安裝的依賴包列表;
  • main: 模塊入口,使用require()引入時優先檢查該字段。若是 main 字段不存在,Node 按照模塊文件定位的規則依次查找包目錄下的 index.js、index.node、index.json;
  • scripts: 包管理器用來安裝、編譯、測試包的命令對象。
  • bin: 配置包的 bin 字段後,能夠經過npm install package_name -g將包添加到執行路徑中,以後能夠「全局使用」。

2、npm 管理

NPM 幫助 Node 完成第三方模塊的發佈、安裝和依賴。能夠直接執行$ npm 查看全部命令。segmentfault

使用$ npm init 能夠快速生成一個 package.json 文件。數組

2.1 npm install 原理

使用 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 模塊加載原理

2.2 npm install 使用

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一鍵安裝這兩個目錄下全部的依賴。

2.3 全局安裝

使用 -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

繼續加油哦永遠十八歲的少女~

十八歲的少女

相關文章
相關標籤/搜索