NPM套件管理器常用命令與原理 === ###### tags: `RESTful` npm(Node Packge Manager)是一個依附在node.js執行環境中的主流線上套件庫,開發人員可以在node.js的環境中,透過npm來下載各式各樣的javaScript套件使用。並且在npm中統一管理不同專案所使用的套件。 :::success :bookmark: **目錄** :::spoiler [TOC] ::: ## 初始化 ### init ``` npm init ``` 在init執行的過程中,會以詢答的方式依序要你完成一些必要資訊。 ``` name: 專案名,預設為目錄名。 description: 專案描述。 entry point: 專案入口點,主要的邏輯檔案或是執行開始的檔案,通常為app.js或是為空。 test command: 專案測試指令。 git repository: 專案原始碼的版本控管位置(URL)。 keywoard: 專案關鍵字 author: 專案作者,(author-name <author@email.com>)。 license: 專案版權。 ``` init 指令的動作很簡單,便是在目前所在目錄中生成「package.json」的boilerplate(樣板)文件,與「package-lock.json」的版本資訊文件,以及名為「node_modules」的資料夾。 ### package.json npm擁有廣大的軟體生態系,package.json是掌管專案資訊的重要檔案。並且,每個專案都需要使用package.json去設定所使用到的library到底有什麼,並記錄所有的dependency(依賴)關係。 ### package-lock.json 對於有在進行版本控制或者是嚴謹開發的程式中,package-lock.json便是很重要的存在。這個檔案它有以下特性: 1. 每次 npm install / uninstall /update 都會更新 2. 紀錄每個套件的詳細版本 3. 紀錄套件的 tarball(套件壓縮檔),是從哪個 url 下載來的 4. 使用 hash(雜湊),確認檔案是否損壞 5. 以一個 require 欄位,說明這個 dependency 是被哪個函式庫所要求的 也因為有package-lock.json,便可以讓不同環境中的專案在每次部屬時,保持一樣的版本。杜絕重新下載套件後,因為套件版本號不同的關係,造成程式出現錯誤的情形。 ### node_modules 套件的實際儲存位置,將會在每個init過後的專案中出現,存放每個專案所依賴的套件。 ## 套件管理 ### install 完成init後,便可以開始安裝專案所需要的套件,只要執行: ``` npm install <套件名稱> ``` 便可以安裝所需套件,比如說: ``` npm install jquery ``` 就會安裝jquery library到node_modules資料夾中,並且在package.json中留下專案與套件的dependency(相依性)。 > 為什麼npm要記錄我們裝過哪些套件? 若往後有人要使用你所撰寫的code,便可以透過紀錄輕易了解專案的dependency,甚至可以確定你所使用的library版本。 > 為什麼library要特地使用node_modules資料夾另外儲存 若今天有兩個專案在相同library卻是不同版本號的情形下開發,就必須要獨立這兩個library的位置。比如說:A、B專案分別使用SweetAlert 1與2,這兩個library便會各自安裝在各自的目錄中,保持每個開發環境永遠不會有互相衝突的機會,而這個資料夾就是node_modules。 ### install 與Git相互配合 若今天你有一個專案需要在版本控制中部屬到不同環境,但library的數量與容量卻不利於git的管理,便可以利用package.json的特性執行: ``` npm install ``` 只要install後頭沒有library名稱,直接執行這個指令,npm便自動將package.json所缺的Dependency裝回,並且符合package-lock.json中所記載的版本號。 不需要將龐大的node_modules資料夾上傳至git中,只需要保存package.json與package-lock.json。 #### 建立.gitignore 在push專案文件前,我們已經知道某些資料夾的內容不需要上傳,這時我們就需要使用.gitignore。它的存在會幫我排除檔案或資料夾的上傳 。 像是node_modules的套件內容在網路上全部都下載的到,就不用被push到我們的git儲存庫中。 ``` //新建「.gitignore」檔案在專案根目錄,並直接鍵入需要被排除的資料夾名稱。 node_modules ``` ### uninstall & update #### 刪除套件 若是要移除專案中的某個套件,便可以執行: ``` npm uninstall <套件名稱> ``` 執行刪除後,將會統一更新package.json、package-lock.json與node_modules的內容。 #### 更新單一套件 若要將專案中的某個套件進行升級,執行以下指令: ``` npm update <套件名稱> ``` #### 更新全部套件 若是要一次升級專案中所有的套件,執行以下命令: ``` npm update ``` > 不管是哪種更新方法,都將會更新package-lock.json中的版本資訊。
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.