詳解Node.js包的工程目錄與NPM套件管理器的使用_node.js
工程目錄
了解了以上知識後,現在我們可以來完整地規劃一個工程目錄了。以編寫一個命令列程式為例,一般我們會同時提供命令列模式和 API 模式兩種使用方式,我們會藉助三方包來編寫程式碼。除了程式碼外,一個完整的程式也應該有自己的文件和測試案例。因此,一個標準的工程目錄都看起來像下邊。
- /home/user/workspace/node-echo/ # 工程目录 - bin/ # 存放命令行相关代码 node-echo + doc/ # 存放文档 - lib/ # 存放API相关代码 echo.js - node_modules/ # 存放三方包 + argv/ + tests/ # 存放测试用例 package.json # 元数据文件 README.md # 说明文件
其中部分文件內容如下:
/* bin/node-echo */ var argv = require('argv'), echo = require('../lib/echo'); console.log(echo(argv.join(' '))); /* lib/echo.js */ module.exports = function (message) { return message; }; /* package.json */ { "name": "node-echo", "main": "./lib/echo.js" }
上述範例中分類存放了不同類型的文件,並透過 node_moudles 目錄直接使用三方包名載入模組。此外,定義了package.json 之後,node-echo 目錄也可被當作一個套件來使用。
NPM
NPM 是隨同 NodeJS 一起安裝的套件管理工具,能解決 NodeJS 程式碼部署上的許多問題,常見的使用情境有以下幾種:
- 允許使用者從 NPM 伺服器下載別人寫的三方套件到本機使用。
- 允許使用者從 NPM 伺服器下載並安裝別人編寫的命令列程式到本機使用。
- 允許使用者將自己編寫的套件或命令列程式上傳到 NPM 伺服器供別人使用。
可以看到,NPM 建立了一個 NodeJS 生態圈,NodeJS 開發者和使用者可以在裡邊互通有無。以下分別介紹這三種場景下如何使用 NPM。
下載三方包
需要使用三方包時,首先得知道有哪些包可用。雖然 npmjs.org 提供了個搜尋框可以根據包名來搜索,但如果連想使用的三方包的名字都不確定的話,就請百度一下吧。知道了包名後,例如上邊範例中的 argv,就可以在工程目錄下開啟終端,使用以下指令來下載三方包。
$ npm install argv ... argv@0.0.2 node_modules\argv
下載好之後,argv 套件就放在了工程目錄下的 node_modules 目錄中,因此在程式碼中只需要通過 require('argv')的方式就好,無需指定三方包路徑。
以上指令預設下載最新版三方包,如果想要下載指定版本的話,可以在包名後邊加上@
$ npm install argv@0.0.1 ... argv@0.0.1 node_modules\argv
如果使用到的三方包比較多,在終端機下一個包一條命令地安裝未免太人肉了。因此 NPM 對 package.json 的字段做了擴展,允許在其中申明三方包依賴。因此,上邊範例中的 package.json 可以改寫如下:
{ "name": "node-echo", "main": "./lib/echo.js", "dependencies": { "argv": "0.0.2" } }
這樣處理後,在工程目錄下就可以使用 npm install 指令批次安裝三方包了。更重要的是,當以後 node-echo 也上傳到了 NPM 伺服器,別人下載這個套件時,NPM 會根據套件中申明的三方套件依賴自動下載進一步依賴的三方套件。例如,使用 npm install node-echo 指令時,NPM 會自動建立下列目錄結構。
- project/ - node_modules/ - node-echo/ - node_modules/ + argv/ ... ...
如此一來,使用者只需關心自己直接使用的三方包,不需要自己去解決所有包的依賴關係。
安裝命令列程式
從 NPM 服務下載安裝一個命令列程式的方法與三方套件類似。例如上例中的 node-echo 提供了命令列使用方式,只要 node-echo 自己配置好了相關的 package.json 字段,對於使用者而言,只需要使用以下命令安裝程式。
$ npm install node-echo -g
參數中的 -g 表示全域安裝,因此 node-echo 會預設安裝到以下位置,並且 NPM 會自動建立好 Linux 系統下所需的軟鏈檔案或 Windows 系統下需要的.cmd檔。
- /usr/local/ # Linux系统下 - lib/node_modules/ + node-echo/ ... - bin/ node-echo ... ... - %APPDATA%\npm\ # Windows系统下 - node_modules\ + node-echo\ ... node-echo.cmd ...
發布程式碼
第一次使用 NPM 發布代碼前需要註冊一個帳號。終端機下運行 npm adduser,之後按照提示做即可。帳號搞定後,接著我們需要編輯 package.json 文件,加入 NPM 必需的欄位。接著上方 node-echo 的例子,package.json 裡必要的欄位如下。
{ "name": "node-echo", # 包名,在NPM服务器上须要保持唯一 "version": "1.0.0", # 当前版本号 "dependencies": { # 三方包依赖,需要指定包名和版本号 "argv": "0.0.2" }, "main": "./lib/echo.js", # 入口模块位置 "bin" : { "node-echo": "./bin/node-echo" # 命令行程序名和主模块位置 } }
之後,我們就可以在 package.json 所在目錄下執行 npm publish 發布程式碼了。
版本號碼
使用 NPM 下載和發佈程式碼時都會接觸到版本號。 NPM 使用語意版本號來管理程式碼,這裡簡單介紹一下。
語意版本號分為 X.Y.Z 三位,分別代表主版本號、次版本號和補丁版本號。當程式碼變更時,版本號碼會依照下列原則更新。
+ 如果只是修復bug,需要更新Z位。
+ 如果是新增了功能,但是向下相容,需要更新Y位元。
+ 如果有大變動,向下不相容,需要更新X位元。
版本號碼有了這個保證後,在申明三方包依賴時,除了可依賴一個固定版本號外,還可依賴某個範圍的版本號。例如"argv": "0.0.x"表示依賴 0.0.x 系列的最新版 argv。 NPM 支援的所有版本號範圍指定方式可以查看官方文件。
靈機一點
除了本章介紹的部分外,NPM 還提供了許多功能,package.json 裡也有很多它有用的欄位。除了可以在 npmjs.org/doc/ 查看官方文件外,這裡再介紹一些 NPM 常用指令。
NPM 提供了許多指令,例如 install 和 publish,使用 npm help 可查看所有指令。
- 使用 npm help 可查看某條指令的詳細協助,例如 npm help install。
- 在 package.json 所在目錄下使用npm install . -g可先在本機安裝目前命令列程序,可用於發布前的本機測試。
- 使用npm update
可以把目前目錄下 node_modules 子目錄裡邊的對應模組更新至最新版本。 - 使用npm update
-g可以把全域安裝的對應命令列程式更新至最新版。 - 使用npm cache clear可以清空 NPM 本機緩存,用於對付使用相同版本號發布新版本程式碼的人。
- 使用npm unpublish
@ 可以撤銷發佈自己發佈過的某個版本程式碼。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

PiNetwork節點詳解及安裝指南本文將詳細介紹PiNetwork生態系統中的關鍵角色——Pi節點,並提供安裝和配置的完整步驟。 Pi節點在PiNetwork區塊鏈測試網推出後,成為眾多先鋒積極參與測試的重要環節,為即將到來的主網發布做準備。如果您還不了解PiNetwork,請參考Pi幣是什麼?上市價格多少? Pi用途、挖礦及安全性分析。什麼是PiNetwork? PiNetwork項目始於2019年,擁有其專屬加密貨幣Pi幣。該項目旨在創建一個人人可參與

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

JavaScript是一種廣泛應用於Web開發的程式語言,而WebSocket則是一種用於即時通訊的網路協定。結合二者的強大功能,我們可以打造一個高效率的即時影像處理系統。本文將介紹如何利用JavaScript和WebSocket來實作這個系統,並提供具體的程式碼範例。首先,我們需要明確指出即時影像處理系統的需求和目標。假設我們有一個攝影機設備,可以擷取即時的影像數
