package.json檔案。這篇文章就來帶大家了解package.json文件,希望對大家有幫助!了解package.json
每個專案(npm上下載的包,或其他的nodejs專案)的根目錄下面,一般都有一個package.json文件, 定義了這個專案所需的各種模組,以及專案的設定信息(例如名稱、版本、許可證、如何啟動專案、運行腳本等元資料)。 npm install指令根據這個設定文件,自動下載所需的模組。
package.json檔案就是一個JSON對象,而這個物件的每個成員就是目前專案的一個設定。例如name就是專案名稱, version是版本(遵守「大版本.次要版本.小版本」的格式)。也會在專案的生命週期中扮演多個角色、開發、測試、上線版本。
package.json的作用
package.json如何創建
1、使用命令行工具客戶端CLI
npm init
這將啟動命令行調查問卷,該調查問卷將package.json在您啟動命令的目錄中創建.

前端(vue)入門到精通課程:進入學習
2、創建預設值
要取得預設值package.json ,請npm init使用--yes or -y標誌運行:
npm init -y
此方法將package.json使用從當前目錄中提取的資訊產生預設值, 跳過回答問題步驟。

3.手動建立
直接在專案根目錄新建一個package.json 文件,然後輸入相關的內容。 具體請查看下文package.json的注意事項。
package.json檔案常見字段詳解
1、 name
必須字段,當前模組包名稱, 長度必須小於等於214個字符,不能以"."(點)或"_"(下劃線)開頭,不能包含大寫字母。
這個名字可能會作為參數被傳入require(),所以它應該比較短,但也要意義清晰。
2、 version
必須字段,目前包的版本號,初次建立預設為
1.0.0。
version必須可以被npm所依賴的一個node-semver模組解析。定義了目前專案的版本迭代進度。 (遵守「大版本.次要版本.小版本」的格式)
可能現在很多小夥伴們沒有註意或不在乎版本號,更多使用產品的版本號,或者git hashcode方式。
3、 description
可選字段,必須是字串。目前包的描述訊息,是一個字串。它可以幫助人們在使用npm search時找到這個套件。
如果package.json 中沒有description訊息,npm 使用專案中的README.md 的第一行作為描述資訊。這個描述資訊有助於別人搜尋你的項目,因此建議好好寫description資訊。
4、 main
可選字段, 指定了專案載入的入口文件。
這個欄位的預設值是模組根目錄下面的index.js 。
5. scripts
可選字段,
scripts是一個由腳本命令組成的hash對象,他們在包不同的生命週期中被執行。 key是生命週期事件,value是要執行的指令。 指定了執行腳本指令的npm命令列縮寫,例如start指定了執行npm run start時,所要執行的命令。我們可以自訂我們想要的運行腳本命令。
參考:http://www.ruanyifeng.com/blog/2016/10/npm_scripts.html
scripts設定執行的腳本
1)執行指令echo xxx
為什麼可以執行呢?
當我執行npm run的時候,就會自動新建一個Shell,在這個Shell 裡面執行指定的腳本指令。因此,只要是Shell(一般是Bash)可以執行的指令,就可以寫在npm 腳本裡面。會把目前目錄下的node_modules/.bin也拷貝到目前的系統的path(只是臨時拷貝,執行結束後,在將PATH變數恢復原樣), 所以目前目錄的node_modules/.bin子目錄裡面的所有腳本,都可以直接用腳本名稱調用,不必加上路徑。
例如:
我們用node執行一個node.js服務是, node + 文件可以用node server.js ; 我們也可以用webpack的打包前端文件, webpack-dev-server ,當然webpack 和webpack-dev-server是要安裝依賴的模組;
"scripts": {
"build": "webpack --mode=development",
"dev": "webpack-dev-server --mode=development --contentBase=./dist",
"server":"node app.js"
}我們在命令列工具中輸入npm run server ,就會呼叫node app.js幫我們運作。
簡寫形式:
npm start是npm run start npm stop是npm run stop的簡寫npm test是npm run test的簡寫npm restart是npm run stop && npm run restart && npm run start的簡寫
常用腳本-----網上收集轉
// 刪除目錄"clean": "rimraf dist/*", // 在本地搭建一個HTTP 服務"serve": "http-server -p 9090 dist/", // 開啟瀏覽器"open:dev": "opener http://localhost:9090", // 即時刷新"livereload": "live-reload --port 9091 dist/", // 建構HTML 檔案"build:html": "jade index.jade > dist/index.html", // 只要CSS 檔案有變動,就重新執行建置"watch:css": "watch 'npm run build:css' assets/styles/", // 只要HTML 檔案有變動,就重新執行建置"watch:html": "watch 'npm run build:html' assets/html", // 部署到Amazon S3 "deploy:prod": "s3-cli sync ./dist/ s3://example-com/prod-site/", // 建置favicon "build:favicon": "node scripts/favicon.js", "start": "cross-env NODE_ENV=production node server/index.js",
6、 dependencies、devDependencies
可選字段,
dependencies字段指定了專案運行所依賴的模組,devDependencies指定專案開發所需的模組。
值指向一個物件。該物件的各個成員,分別由模組名和對應的版本要求組成,表示依賴的模組及其版本範圍。
預設創建的package.json沒有,當我們安裝npm install一個模組時就會產生。
npm install express npm install express --save npm install express --save-dev
上面程式碼表示單獨安裝express模組,
dependencies屬性,--save參數表示將該模組寫入dependencies屬性,--save-dev表示將該模組寫入devDependencies屬性。7、bundledDependencies
可選字段,發布包時同時打包的其他依賴。
8、 peerDependencies
可選字段,相容性依賴,如果你的專案或模組,同時依賴另一個模組,但是所依賴的版本不一樣。
例如,你的專案依賴A模組和B模組的1.0版,而A模組本身又依賴B模組的2.0版。
{
"name": "chai-as-promised",
"peerDependencies": {
"chai": "1.x"
}
}上面程式碼指定,安裝chai-as-promised模組時,主程式chai必須一起安裝,而且chai的版本必須是1.x 。如果你的專案指定的依賴是chai的2.0版本,就會報錯。
9. bin
可選字段,bin字段用來指定各個內部命令對應的可執行檔的位置。
在專案根目錄建立/bin/www檔
#! /usr/bin/env node
package.json中設定
"bin":{
"lee-cli":"./bin/www"
} npm link將package中的屬性bin的值路徑新增全域連結建立捷徑連接
在命令列中執行lee-cli就會執行bin/www檔。過程是:
在上面的範例中,www會建立符號連結node_modules/.bin/www 。由於node_modules/.bin/目錄會在執行時間加入系統的PATH變量,因此在執行npm時,就可以不帶路徑,直接透過指令來呼叫這些腳本。
10、config
config字段用於向環境變數輸出值
{
"name" : "package",
"config" : { "port" : "8080" },
"scripts" : { "start" : "node server.js" }
}如果想要改變我們可以使用
npm config set package:port 80
11、engines
可選字段,指明了該模組運行的平台版本,例如Node 的某個版本或瀏覽器, 也可以指定適用的
npm版本。
"engines" : {
"node" :
">=0.10.3 <0.12"
} 12、license
可選字段, 表示定義適用於package.json所描述程式碼的許可證。不同的協議有不同的限制。讓使用者知道他們有何權限來使用你的模組,以及使用該模組有哪些限制。
可參考: choosealicense.com/ 選擇許可證。
如:MIT:最大許可,別人下載你的程式碼可以改你的程式碼,預設安裝值。
13、author
可選字段,專案開發者。
14、private
可選字段,布爾值,是否私有,設定為true 時,npm 拒絕發布。
這是防止私有包被以外發布的一種方法。如果你希望包裝某個包只能發佈到特定的一個registry中(比如,一個內部的registry),則可以使用下面的publishConfig字典來描述以在publish-time重寫registry配置參數。
15.keywords
可選字段,項目關鍵字,是字串數組。它可以幫助人們在使用npm search時找到這個套件。
16、os
可選字段,指定模組可以在什麼作業系統上運行
17、style
style指定供瀏覽器使用時,樣式檔案所在的位置。
18.repository
包代碼存放的地方的類型,可以是git 或svn,git 可在Github 上
19、homepage
可選字段,沒有http://等帶協議前綴的URL。
版本問題:
version:"1.0.0"
1.0.0:
第一位改變表示:不相容舊代碼,大規模的更新,新版本發布;
第二位表示:增加了一些功能,向下兼容;
第三位元表示:小的補丁,bug修改;
我們發表專案的時候,一盤使用npm + git
npm version patch (patch打補丁) 這種會改變版本的第三位;使用git tag執行即會自動在git上版本號npm version minor這種改變的版本號的第二位;同步git版本;npm version major這種改變版本號的第一位;同步git版本;npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease | from-git] major:主版本號minor:次版本號patch:補丁號碼premajor:預備主版本prepatch:預備次版本prerelease:預發布版本
ps:注意,如果報錯:Git working directory not clean 是說明你現在需要git status是clean的。
git add . git commit -m"package.json詳解"
npm versin monir -m"增加版本号"
git push -u origin master
如何制定規則?
身為使用者,我們可以在package.json 檔案中寫明我們可以接受這個套件的更新程度(假設目前依賴的是1.2.4 版本):
如果只打算接受補丁版本的更新(也就是最後一位的改變),就可以這麼寫:
1.2 1.2.x ~1.2.4
如果接受小版的更新(第二位的改變),就可以這麼寫:
1 1.x ^1.2.4
如果可以接受大版本的更新(自然接受小版本和補丁版本的改變),就可以這麼寫:
*x
小結一下:總共三種版本變化類型,接受依賴包哪種類型的更新,就把版本號碼準確寫到前一位。
版本週期、階段:
例如:
2.1.0-beta.1一般這樣用戶不會安裝這種的,這種可以用內側、測試者使用。
依賴套件的版本問題
| 實例 | 說明 |
|---|---|
| ~1.2.3 | 主版本+次要版本+補丁版本;1.2.3 <= version < 1.3.0; |
| ~1.2 | 主版本+次要版本;1.2.0 <= version < 1.3. 0 |
| ~1 | 主版本;1.0.0 <= version < 2.0.0 |
| 符號 | 實例 | 版本範圍 | 說明 |
|---|---|---|---|
| 1.0.0 | 1.0.0 | 鎖定1.0.0版本,必須這個版本。 | |
| ^會符合最新的大版本依賴套件 | ^1.2.3、^0.2.3 | >=1.2.3 <2.0.0、>=0.2.3 <0.3.0 | 表示安裝1.xx的最新版本(不低於1.2 .3,包括1.3.0),但是不安裝2.xx,也就是說安裝時不改變大版本號。需要注意的是,如果大版本號為0,則插入號的行為與波浪號相同,這是因為此時處於開發階段,即使是次要版本號變動,也可能帶來程式的不相容。 (主版本) |
| ~會符合最近的小版本依賴套件 | ~1.2.3 | >=1.2.3 <1.3.0 | 表示安裝1.2.x的最新版本(不低於1.2.3),但不安裝1.3.x,也就是說安裝時不改變大版本號碼和次要版本號。 |
| >= | >=2.1.0 | >=2.1.0 | 大於等於2.1.0 |
| <= | <=2.0.0 | <=2.0.0 | 小於等於2.0.0 |
| laster | 安裝最新的版本 | ||
| * | >=0.0.0 | 任何版本 | |
| - | 1.2.3 - 2.3.4 | >=1.2.3 <=2.3.4 |
區分安裝Dependencies和dependencies ?
devDependencies是開發所需的模組,所以我們可以在開發過程中需要的安裝上去,來提高我們的開發效率,例如一些知名的第三方函式庫, webpack 、 rollUp 、 less 、 babel這些。 就沒必要在生成環境安裝。
以下類別庫都建議安裝到devDependencies :
依賴套件(指定、更新、本機、使用、卸載)
1、安裝本機依賴套件
npm install jquery
這個指令會在目前目錄建立一個node_modules目錄,然後下載我們指定的套件到這個目錄。
2.指定安裝版本,可以在package name後面@版本号。
如果套件的名稱以包開頭@ ,則它是範圍包。
npm install [email protected] npm install jquery@">=1.1.0 <2.2.0" npm install jquery@latest
更新之後,dependencies內的版本號碼也會改變。
3.更新依賴套件
npm update jquery
4、使用套件
let jquery = require('jquery'); <script src="/node_modules/jquery/dist/jquery.js">//這個需要注意路徑</script>
6 、卸載依賴套件
npm uninstall jquery
Semantic versioning(語意化版本規則)
https://docs.npmjs.com/about-semantic-versioning
https://github.com/npm/node-semver
package.json注意事項
根據上邊我們在使用npm init會詢問我們填幾項內容,有的可以不填,有的必須填,這些必填都是一個package.json內容必須要具備的字段: name和version ,如果沒有,無法執行install
xxx其他注意事項: