package.json——編譯要素
????現(xiàn)代化的打包工具都會(huì)根據(jù)package.json內(nèi)的指示開始打包流程,以下是Vue包package.json的簡(jiǎn)化版示例:
main
?項(xiàng)目CommonJS模塊的入口文件,在沒有設(shè)置main時(shí)那么入口文件就是package.json平級(jí)目錄下的index.js。module
?項(xiàng)目ES模塊的入口文件,無默認(rèn)值,當(dāng)一個(gè)項(xiàng)目同時(shí)定義了 main,browser 和 module,像 webpack2+,rollup 等構(gòu)建工具會(huì)感知這些字段,并會(huì)根據(jù)環(huán)境以及不同的模塊規(guī)范來進(jìn)行不同的入口文件查找。types
?項(xiàng)目?TypeScript 的類型定義的入口文件。unpkg
?為項(xiàng)目開啟npm的CDN支持,并指定CDN解析路徑。訪問https://unpkg.com/包名時(shí)會(huì)重定向到https://unpkg.com/包名@版本/unpkg路徑。jsdelivr
?為項(xiàng)目啟用npm的CDN支持,并指定CDN解析路徑。訪問https://unpkg.com/包名時(shí)會(huì)重定向到https://cdn.jsdelivr.net/npm/包名@版本/unpkg路徑。config
?為包腳本配置參數(shù),上例中會(huì)存在一個(gè)名為npm_package_config_port的環(huán)境變量。files
?指定除了package.json,license,README 和main
?字段里指定的文件以外需要一同發(fā)布的文件。bin
?一些包存在可執(zhí)行文件,這些包希望將這些文件安裝到環(huán)境變量中,這樣這些可執(zhí)行文件才能得以調(diào)用。當(dāng)這個(gè)包被全局安裝時(shí)該文件將被鏈接到全局bin目錄中,或者將創(chuàng)建一個(gè)cmd來執(zhí)行bin字段中的指定文件。它可以直接通過npm exec或通過npm run-script調(diào)用其他腳本時(shí)通過名稱被鏈接到該包。exports
?node 14+可以配置根據(jù)條件自動(dòng)切換的導(dǎo)出路徑,在vue的package.json示例中對(duì)“.”的配置意為:如果是import vue from "vue"則使用包package.json目錄下的index.mjs文件;如果使用const vue =?require("vue")寫法則使用包package.json目錄下的index.js文件。當(dāng)我們?cè)陧?xiàng)目中使用包名引入包的時(shí)候,其實(shí)是通過包名找到了加載到本地的包的地址,也就是說這里的“.”其實(shí)是引入包的根目錄地址。除此之外exports配置項(xiàng)還有為路徑起別名的能力:當(dāng)導(dǎo)入路徑為“vue/server-renderer”時(shí)實(shí)際尋找的路徑為“vue包所在路徑/server-renderer/index.xxx”文件。另外exports配置項(xiàng)最重要的功能是對(duì)可訪問路徑的控制,只有在exports配置項(xiàng)中標(biāo)明的路徑可被外界訪問。dependencies
?標(biāo)記了包的運(yùn)行時(shí)依賴,與之相同的還有devDependencies(開發(fā)時(shí)依賴,例如eslint等之在開發(fā)過程中或者打包過程中生效的依賴項(xiàng))、peerDependencies(同伴依賴,表示當(dāng)前包依賴于其他包,在安裝當(dāng)前包時(shí)會(huì)檢查項(xiàng)目是否含有同伴依賴,如果沒有則會(huì)安裝到根依賴目錄中)、optionalDependencies(可選依賴,是否安裝成功都不會(huì)有影響)、peerDependenciesMeta(可選同伴依賴)、bundleDependencies(打包依賴,在打包依賴內(nèi)標(biāo)注的依賴項(xiàng)會(huì)在發(fā)布包時(shí)被打入發(fā)包包內(nèi)node_modules中將會(huì)出現(xiàn)打包依賴相關(guān)文件。打包依賴的配置項(xiàng)必須是dependencies、devDependencies聲明過的依賴項(xiàng))
關(guān)于項(xiàng)目依賴還有很多信息可以查閱,詳見
????package.json | npm Docs (npmjs.com)