package.json文件
執行 npm init
命令,會在當前目錄生成一個 package.json
文件
這個文檔是你需要知道的關于你的 package.json
文件中需要什么的所有信息。它必須是實際的 JSON
,而不僅僅是一個 JavaScript
對象文字。
//package.json
{//如果你打算發布你的包,在你的package.json中最重要的事情是名稱和版本字段,因為它們是必需的。名稱和版本一起構成了一個標識符,該標識符被認為是完全唯一的。對軟件包的更改應與對版本的更改一起沿著。// 如果您不打算發布您的軟件包,則名稱和版本字段是可選的。"name": "axios","version": "1.7.2",// 在里面加上描述。這是一個字符串。這有助于人們發現您的軟件包,因為它在npm search中列出。"description": "Promise based HTTP client for the browser and node.js",// 把關鍵字放進去。這是一個字符串數組。這有助于人們發現您的軟件包,因為它在npm search中列出。"keywords": ["xhr","http","ajax","promise","node"],// 項目主頁的URL。"homepage": "https://axios-http.com",// 您的項目問題跟蹤器的URL和/或應向其報告問題的電子郵件地址。這些對遇到您的軟件包問題的人很有幫助。"bugs": {"url": "https://github.com/axios/axios/issues","email": "project@hostname.com"},// 你應該為你的軟件包指定一個許可證,這樣人們就知道他們可以如何使用它,以及你對它的任何限制。"license": "MIT",// "license": "BSD-3-Clause"// "license": "(ISC OR GPL-3.0)"// "license": "SEE LICENSE IN <filename>"//作者 人員字段,email和url都是可選的。"author": "Barney Rubble","email": "b@rubble.com","url": "http://barnyrubble.tumblr.com/",// "author": "Barney Rubble <b@rubble.com> (http://barnyrubble.tumblr.com/)"// 資金"funding": {"type": "individual","url": "http://example.com/donate"},// main字段是一個模塊ID,它是程序的主要入口點。如果未設置main,則默認為包根文件夾中的index.js。"main": "index.js",// 如果你的模塊是要在客戶端使用的,那么應該使用瀏覽器字段而不是主字段。這有助于提示用戶它可能依賴于Node.js模塊中不可用的原語。// browser 字段提供對瀏覽器環境更友好的模塊入口。"browser": {"./lib/adapters/http.js": "./lib/helpers/null.js","./lib/platform/node/index.js": "./lib/platform/browser/index.js","./lib/platform/node/classes/FormData.js": "./lib/helpers/null.js"},
// 很多軟件包都有一個或多個可執行文件,他們想安裝到PATH中。npm使這變得非常容易(事實上,它使用此功能來安裝“npm”可執行文件。)
// 要使用這個,請在package.json中提供一個bin字段,它是命令名到本地文件名的映射。當這個軟件包被全局安裝時,該文件將被鏈接到全局bins目錄中,或者將創建一個cmd(Windows命令文件)來執行bin字段中的指定文件,因此它可以由name或name.cmd(在Windows PowerShell上)運行。當這個包作為一個依賴項安裝在另一個包中時,這個文件將被鏈接到這個包中,它可以直接通過npm exec或通過其他腳本中的名稱在通過npm run-script調用它們時使用。"bin": {"myapp": "bin/cli.js","axios": "bin/api.js"},// 指定代碼所在的位置。這對那些想做貢獻的人很有幫助。如果git repo在GitHub上,那么npm repo命令就可以找到你。"repository": {"type": "git","url": "https://github.com/axios/axios.git"},// 腳本"scripts": {"start": "node ./sandbox/server.js","build": "gulp clear && cross-env NODE_ENV=production rollup -c -m","examples": "node ./examples/server.js",},// “config”對象可用于設置在升級過程中持續存在的包腳本中使用的配置參數。"config": {"port": "8080",},// 依賴// dependencies字段中聲明的是項目的生產環境中所必須的依賴包。當使用 npm 或 yarn 安裝npm包時,該npm包會被自動插入到此配置項中"dependencies": {"foo": "1.0.0 - 2.9999.9999","bar": ">=1.0.2 <2.1.2","baz": ">1.0.2 <=2.3.4","boo": "2.0.1",//完全等于"qux": "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0","asd": "http://asdf.com/asdf.tar.gz","elf": "~1.2.3",//相似版本"two": "2.x",//"lat": "latest","antd": "^5.12.8","antd-img-crop": "^4.12.2","antd-style": "^3.6.1",// 本地路徑"bar": "file:../foo/bar",// 本地路徑 直接鏈接到項目下的ckeditor5目錄"ckeditor5-custom-build": "file:./ckeditor5",},// devDependencies中聲明的是開發階段需要的依賴包,如Webpack、Eslint、Babel等,用于輔助開發。它們不同于 dependencies,因為它們只需安裝在開發設備上,而無需在生產環境中運行代碼。當打包上線時并不需要這些包,所以可以把這些依賴添加到 devDependencies 中,這些依賴依然會在本地指定 npm install 時被安裝和管理,但是不會被安裝到生產環境中。"devDependencies": {},// 在某些情況下,你想表達你的包與宿主工具或庫的兼容性,而不一定要做這個宿主的require。這通常被稱為插件。
// 有些情況下,我們的項目和所依賴的模塊,都會同時依賴另一個模塊,但是所依賴的版本不一樣。比如,我們的項目依賴A模塊和B模塊的1.0版,而A模塊本身又依賴B模塊的2.0版。大多數情況下,這不是問題,B模塊的兩個版本可以并存,同時運行。但是,有一種情況,會出現問題,就是這種依賴關系將暴露給用戶。
// 最典型的場景就是插件,比如A模塊是B模塊的插件。用戶安裝的B模塊是1.0版本,但是A插件只能和2.0版本的B模塊一起使用。這時,用戶要是將1.0版本的B的實例傳給A,就會出現問題。因此,需要一種機制,在模板安裝的時候提醒用戶,如果A和B一起安裝,那么B必須是2.0模塊。
// peerDependencies字段就是用來供插件指定其所需要的主工具的版本。
// npm3.0版本開始 不會默認安裝了"peerDependencies": {"tea": "2.x"},// bundledDependencies配置項是一個數組,數組里可以指定一些模塊,這些模塊將在這個包發布時被一起打包。
// 需要注意,這個字段數組中的值必須是在dependencies, devDependencies兩個里面聲明過的包才行"bundledDependencies":[],// 如果需要在找不到包或者安裝包失敗時,npm仍然能夠繼續運行,則可以將該包放在optionalDependencies對象中,optionalDependencies對象中的包會覆蓋dependencies中同名的包,所以只需在一個地方進行設置即可。
// 需要注意,由于optionalDependencies中的依賴可能并為安裝成功,所以一定要做異常處理,否則當獲取這個依賴時,如果獲取不到就會報錯。"optionalDependencies":{},// 引擎// 當我們維護一些舊項目時,可能對npm包的版本或者Node版本有特殊要求,如果不滿足條件就可能無法將項目跑起來。為了讓項目開箱即用,可以在engines字段中說明具體的版本號// 需要注意,engines只是起一個說明的作用,即使用戶安裝的版本不符合要求,也不影響依賴包的安裝"engines": {"node": ">=0.10.3 <15","npm": "~1.0.20"},// 操作系統"os": ["darwin", "linux","!win32"],//"cpu": ["x64", "ia32","!arm", "!mips"],// 如果你在package.json中設置了"private": true,那么npm將拒絕發布它。"private": true,"types": "index.d.ts","type": "module",//支持使用es module
}
詳細字段描述:https://docs.npmjs.com/cli/v10/configuring-npm/package-json