---
# System prepended metadata

title: package.json
tags: [Svelte]

---

## 整體結構
:::success
package.json可以透過npm init生成，裡面記錄了版本、憑證、依賴、指令(script)...等，可以把它視為專案的控制面板。

![packagejson結構](https://hackmd.io/_uploads/BJ4hQ5oZC.jpg)
### <font color="red">必備屬性</font>
name和version組成在npm中搜尋時的辨識文字(PK)
* name：套件名稱、import名稱
* version：套件版本
### <font color="purple">目錄、文件相關</font>
* main：模組的ID，程式的主要入口，當其他人引用此套件時會下載的檔案(預設值是index.js)
* bin：指定內部命令對應執行文件的位置
* files：包含在此套件的其他檔案
* man：和Linux中man用途一樣，用於查詢指令的說明文件
* directories：目錄，紀錄所有檔案對應的資料夾路徑
### <font color="darkblue">協議</font>
紀錄套件的授權跟限制，像是「版權的歸屬」、「是否可修改」、「在甚麼情況可以自由使用」、「作者是否承擔風險」...等
### <font color="blue">腳本配置</font>
* script：定義在終端機上可使用的指令(格式：npm run *script_name*)
* config：定義要給script用的參數

### <font color="orange">依賴</font>
下載此專案時會附加下載的其他套件
* dependencies：產生環境時要用到的套件
* devDependencies：只在開發階段要用的套件，在npm install時被下載，但不會被裝到生產環境中
* peerDependencies：指定依賴的套件版本
* optionalDependencies：當dependencies中的套件下載失敗時，可以頂替的套件(名字要和dependencies中一樣)
* bundledDependencies：將dependencies, devDependencies中的套件打包成數組
### <font color="yellow">描述訊息</font>
幫助在npm中搜尋套件
* description：套件簡介
* keyword：能夠讓使用者簡略了解整個套件的hashtag
* author、contributors：此套件的作者、貢獻者
* homepage：此專案主頁的路徑(網址)
* repository：儲存程式碼的路徑(網址)
* bugs：紀錄連絡資訊，可以回饋意見
### <font color="green">發佈配置</font>
* private：是否發布到網路上供其他人使用
* preferGlobal：當下載者不在Global中下載的話會顯示警告
* publishConfig：發佈到網路上時的一些配置
* os：限制安裝環境，要在哪個os、cpu下安裝
:::