# 項(xiàng)目配置文件
- 項(xiàng)目根目錄中的
project.config.json和project.private.config.json文件可以對項(xiàng)目進(jìn)行配置, project.private.config.json中的相同設(shè)置優(yōu)先級高于project.config.json- 可以在
project.config.json文件中配置公共的配置,在project.private.config.json配置個(gè)人的配置,可以將project.private.config.json寫到.gitignore避免版本管理的沖突。 project.private.config.json中有的字段,開發(fā)者工具內(nèi)的設(shè)置修改會優(yōu)先覆蓋project.private.config.json的內(nèi)容。如在project.private.config.json有appid字段,那么在 詳情-基本信息 中修改了 appid,會寫到project.private.config.json中,不會覆蓋掉project.config.json的appid字段的內(nèi)容- 開發(fā)階段相關(guān)的設(shè)置修改優(yōu)先同步到
project.private.config.json中,但與最終編譯產(chǎn)物有關(guān)的設(shè)置無法在project.private.config.json中生效,界面上的改動(dòng)也不會同步到project.private.config.json文件中。詳見 表格 是否允許私有設(shè)置。
# 一級字段
可以在項(xiàng)目根目錄使用 project.config.json 文件對項(xiàng)目進(jìn)行配置。
| 字段名 | 類型 | 說明 |
|---|---|---|
| miniprogramRoot | Path String | 指定小程序源碼的目錄(需為相對路徑) |
| qcloudRoot | Path String | 指定騰訊云項(xiàng)目的目錄(需為相對路徑) |
| pluginRoot | Path String | 指定插件項(xiàng)目的目錄(需為相對路徑) |
| cloudbaseRoot | Path String | 云開發(fā)代碼根目錄(需為相對路徑) |
| cloudfunctionRoot | Path String | 云函數(shù)代碼根目錄(需為相對路徑) |
| cloudfunctionTemplateRoot | Path String | 云函數(shù)本地調(diào)試請求模板的根目錄(需為相對路徑) |
| cloudcontainerRoot | Path String | 云托管代碼根目錄(需為相對路徑) |
| compileType | String | 編譯類型 |
| setting | Object | 項(xiàng)目設(shè)置 |
| libVersion | String | 基礎(chǔ)庫版本 |
| appid | String | 項(xiàng)目的 appid |
| projectname | String | 項(xiàng)目名字 |
| packOptions | Object | 打包配置選項(xiàng) |
| debugOptions | Object | 調(diào)試配置選項(xiàng) |
| watchOptions | Object | 文件監(jiān)聽配置設(shè)置 |
| scripts | Object | 自定義預(yù)處理 |
| staticServerOptions | Object | 僅在小游戲項(xiàng)目中有效 |
| editorSetting | Object | 指定自動(dòng)生成的文件的 tabIndent 和 tabSize |
| skeletonConfig | Object | 骨架屏相關(guān)設(shè)置 |
# compileType
編譯類型作用于開發(fā)工具的以下設(shè)置
有效值
| 名字 | 說明 |
|---|---|
| miniprogram | 當(dāng)前為普通小程序項(xiàng)目 |
| plugin | 當(dāng)前為小程序插件項(xiàng)目 |
# setting
項(xiàng)目的編譯設(shè)置,可以指定以下設(shè)置。部分設(shè)置無法在 project.private.config.json 中生效
以下字段可以開發(fā)者工具-詳情-本地設(shè)置可以對應(yīng)上

| 字段名 | 類型 | 允許私有設(shè)置[1] | 說明 |
|---|---|---|---|
| condition | Boolean | 否 | 啟用條件編譯 |
| es6 | Boolean | 否 | 是否啟用 es6 轉(zhuǎn) es5[2] |
| enhance | Boolean | 否 | 是否打開增強(qiáng)編譯[2] |
| postcss | Boolean | 否 | 上傳代碼時(shí)樣式是否自動(dòng)補(bǔ)全 |
| minified | Boolean | 否 | 上傳代碼時(shí)是否自動(dòng)壓縮腳本文件 |
| minifyWXSS | Boolean | 否 | 上傳代碼時(shí)是否自動(dòng)壓縮樣式文件 |
| minifyWXML | Boolean | 否 | 上傳代碼時(shí)是否自動(dòng)壓縮 WXML 文件 |
| swc | Boolean | 否 | 開啟 swc 編譯模式 |
| uglifyFileName | Boolean | 否 | 上傳時(shí)進(jìn)行代碼保護(hù) |
| ignoreUploadUnusedFiles | Boolean | 否 | 上傳時(shí)是否過濾無依賴文件 |
| autoAudits | Boolean | 是 | 是否自動(dòng)運(yùn)行體驗(yàn)評分 |
| urlCheck | Boolean | 是 | 是否檢查安全域名和 TLS 版本 |
| compileHotReLoad | Boolean | 是 | 是否開啟文件保存后自動(dòng)熱重載 |
| preloadBackgroundData | Boolean | 是 | 小程序加載時(shí)是否數(shù)據(jù)預(yù)拉取 |
| lazyloadPlaceholderEnable | Boolean | 是 | 是否啟用懶注入占位組件調(diào)試[3] |
| useStaticServer | Boolean | 是 | 僅在小游戲項(xiàng)目有效,是否開啟靜態(tài)資源服務(wù)器[4] |
| bigPackageSizeSupport | Boolean | 是 | 預(yù)覽及真機(jī)調(diào)試的時(shí)主包、分包體積上限調(diào)整為4M(小程序)、8M(小游戲) |
| skylineRenderEnable | Boolean | 是 | 是否開啟 skyline 渲染調(diào)試 |
以下字段是開發(fā)者工具的隱式設(shè)置
| 字段名 | 類型 | 允許私有設(shè)置[1] | 說明 |
|---|---|---|---|
| babelSetting | Object | 否 | 增強(qiáng)編譯下Babel的配置項(xiàng) |
| minifyWXMLSetting | Object | 否 | 壓縮 wxml 的配置項(xiàng) |
| useCompilerPlugins | String[] 或 false | 否 | 編譯插件配置 |
| disableUseStrict | Boolean | 否 | 將 JS 編譯成 ES5 時(shí),是否禁用嚴(yán)格模式 |
| uploadWithSourceMap | Boolean | 否 | 上傳時(shí)是否帶上 sourcemap(默認(rèn)為true) |
| localPlugins | Boolean | 否 | 在小游戲插件項(xiàng)目中,是否啟用 “以本地目錄為插件資源來源”[5] 特性 |
| packNpmManually | Boolean | 否 | 是否手動(dòng)配置構(gòu)建 npm 的路徑 |
| packNpmRelationList | Array | 否 | 僅 packNpmManually 為 true 時(shí)生效,詳細(xì)參考構(gòu)建 npm 文檔 |
| coverView | Boolean | 是 | 是否使用工具渲染 CoverView |
| ignoreDevUnusedFiles | Boolean | 是 | 預(yù)覽、真機(jī)調(diào)試和本地模擬器等開發(fā)階段是否過濾無依賴文件(默認(rèn)為true) |
| ignoreCodeQuality | Boolean | 是 | 預(yù)覽、真機(jī)調(diào)試上傳等開發(fā)階段是否不執(zhí)行代碼質(zhì)量檢測(默認(rèn)為 false ) |
| checkInvalidKey | Boolean | 是 | 是否展示 JSON 文件校驗(yàn)錯(cuò)誤信息 |
| showShadowRootInWxmlPanel | Boolean | 是 | 是否開啟調(diào)試器 WXML 面板展示 shadow-root |
| useIsolateContext | Boolean | 是 | 是否開啟小程序獨(dú)立域調(diào)試特性[6] |
| useMultiFrameRuntime | Boolean | 是 | 是否開啟模擬器預(yù)先載入小程序的某些資源[7]。此設(shè)定為 false 時(shí)會導(dǎo)致 useIsolateContext 失效 |
| useApiHook | Boolean | 是 | 是否啟用 API Hook 功能[8] |
| useApiHostProcess | Boolean | 是 | 是否在額外的進(jìn)程處理一些小程序 API[9] |
| useLanDebug | Boolean | 是 | 僅在小游戲有效,是否開啟局域網(wǎng)調(diào)試服務(wù)器 |
| enableEngineNative | Boolean | 是 | 是否在游戲引擎項(xiàng)目中開啟支持引用 node 原生模塊的底層加速特性 |
| showES6CompileOption | Boolean | 是 | 是否在本地設(shè)置中展示傳統(tǒng)的 ES6 轉(zhuǎn) ES5 開關(guān)(對應(yīng) es6),增強(qiáng)編譯開關(guān) (對應(yīng) enhance) |
注 1: 開發(fā)階段相關(guān)的設(shè)置修改優(yōu)先同步到 project.private.config.json 中,但最終編譯產(chǎn)物有關(guān)的設(shè)置無法在 project.private.config.json 中生效,界面上的改動(dòng)也不會同步到 project.private.config.json 文件中。
注 2: es6 和 enhance 需同時(shí)為 true/false,對應(yīng)于 將 JS 編譯成 ES5
注 3: (懶注入占位組件調(diào)試) 開啟按需注入后在項(xiàng)目設(shè)置面板中會出現(xiàn)對應(yīng)的勾選項(xiàng),開啟之后,按需注入的組件將會停止注入,頁面停止在占位組件狀態(tài),便于調(diào)試自定義占位組件。
注 4: (靜態(tài)資源服務(wù)器) 可以托管項(xiàng)目本地的靜態(tài)資源,主要用于在預(yù)覽時(shí)測試小游戲真機(jī)資源加載的效果。
注 5: (以本地目錄為插件資源來源) 啟用此特性后,工具將停止從線上獲取小游戲插件包內(nèi)容,并將檢驗(yàn)本地相應(yīng)目錄的文件完整性。僅對小游戲插件項(xiàng)目有效。要以本地磁盤目錄作為插件的資源來源,需要同時(shí)在小游戲插件項(xiàng)目的 game.json 中配置相關(guān)的屬性。
注 6: (小程序獨(dú)立域調(diào)試) 一種新的小程序內(nèi)部代碼的執(zhí)行方式,僅影響工具側(cè)的調(diào)試過程。未來將取代傳統(tǒng)的執(zhí)行方式并成為默認(rèn)選擇。僅在 2.11.1 及以上基礎(chǔ)庫有效。關(guān)閉此特性可能有助于規(guī)避一些調(diào)試中遇到的未知報(bào)錯(cuò)。
注 7: (預(yù)先載入小程序的某些資源) 開啟此內(nèi)部特性后,調(diào)試時(shí)小程序的重新載入可能會更快一些。此設(shè)定不影響真機(jī)和實(shí)際運(yùn)行效果。
注 8: (API Hook 功能) 關(guān)閉此內(nèi)部特性可能導(dǎo)致工具的某些調(diào)試功能(例如 mock)失效。此設(shè)定不影響真機(jī)運(yùn)行效果。
注 9: (額外進(jìn)程) 開啟此內(nèi)部特性后,部分 API 的調(diào)用會被移到單獨(dú)的進(jìn)程以減輕工具主進(jìn)程的負(fù)擔(dān)。此設(shè)定不影響真機(jī)運(yùn)行效果。
# useCompilerPlugins
編譯插件配置,目前支持編譯插件有 typescript、less、sass
如
{
"setting": {
"useCompilerPlugins": [
"typescript",
"less"
]
}
}
表示項(xiàng)目支持直接使用 typescript 和 less
# babelSetting
將 JS 編譯為 ES5 時(shí) Babel 的配置項(xiàng),其中可以指定以下設(shè)置
| 字段名 | 類型 | 說明 |
|---|---|---|
| outputPath | String | Babel 輔助函數(shù)的輸出目錄,默認(rèn)為 @babel/runtime |
| ignore | Array<String> | 配置需要跳過Babel編譯(包括代碼壓縮)處理的文件或目錄 |
注 1: 指定文件路徑外,還可以指定目錄,詳見下面項(xiàng)目配置示例
# minifyWXMLSetting
壓縮 wxml 時(shí)的配置項(xiàng),minifyWXMLSetting.global 是全局設(shè)置,minifyWXMLSetting[pagePath.wxml] 是具體頁面 wxml 生效的配置,會和 minifyWXMLSetting.global 全局設(shè)置合并后生效,設(shè)置項(xiàng)如下:
| 字段名 | 類型 | 說明 |
|---|---|---|
| collapseWhitespace | Boolean | 默認(rèn) true,標(biāo)簽內(nèi)所有連續(xù)空白符會被壓縮成 1 個(gè)空格,換行的情況按 preserveLineBreaks 處理 |
| conservativeCollapse | Boolean | 默認(rèn) false: 標(biāo)簽前后不保留空格;true: 但標(biāo)簽前后會保留一個(gè)空格(當(dāng)有時(shí)) |
| preserveLineBreaks | Boolean | 默認(rèn) false:按 collapseWhitespace 處理,true 所有換行都會被保留 |
如代碼:
<view>
a a
a a
</view>
默認(rèn)情況下會被壓縮為
<view>a a a a</view>
如果設(shè)置了:
{
"setting": {
"minifyWXMLSetting": {
"global": {
"collapseWhitespace": true,
"conservativeCollapse": false,
"preserveLineBreaks": true,
}
}
}
}
則被壓縮為:
<view>
a a
a a
</view>
如果設(shè)置了:
{
"setting": {
"minifyWXMLSetting": {
"global": {
"collapseWhitespace": true,
"conservativeCollapse": true,
"preserveLineBreaks": false,
}
}
}
}
則被壓縮為:
<view> a a a a </view>
注 1: text 標(biāo)簽內(nèi)所有的換行和空白符都會被保留
# libVersion
可以指定項(xiàng)目運(yùn)行的基礎(chǔ)庫具體的版本號
也可以 project.config.json 的 libVersion 指定以下值
| 值 | 說明 |
|---|---|
| latest | 最新的非灰度中的基礎(chǔ)庫 |
| trial | 最新的基礎(chǔ)庫 |
| widelyUsed | 使用比例最高的基礎(chǔ)庫 |
以上值在 project.private.config.json 文件中無效,因?yàn)槭謩?dòng)在開發(fā)者工具-詳情-本地設(shè)置中改變基礎(chǔ)庫的版本,會覆蓋掉 project.private.config.json 的 libVersion 字段
# scripts
指定自定義預(yù)處理的命令
| 名字 | 說明 |
|---|---|
| beforeCompile | 編譯前預(yù)處理命令 |
| beforePreview | 預(yù)覽前預(yù)處理命令 |
| beforeUpload | 上傳前預(yù)處理命令 |
# packOptions
packOptions 用以配置項(xiàng)目在打包過程中的選項(xiàng)。打包是預(yù)覽、上傳時(shí)對項(xiàng)目進(jìn)行的必須步驟。
目前可以指定 packOptions.include 字段,用以配置打包時(shí)需要強(qiáng)制帶上的文件(僅限后綴名白名單內(nèi))或者文件夾,匹配的這些文件或文件夾將一定會出現(xiàn)在預(yù)覽或上傳的結(jié)果內(nèi)。(該字段的優(yōu)先級高于 packOptions.ignore)
同時(shí)可以指定 packOptions.ignore 字段,用以配置打包時(shí)對符合指定規(guī)則的文件或文件夾進(jìn)行忽略,以跳過打包的過程,這些文件或文件夾將不會出現(xiàn)在預(yù)覽或上傳的結(jié)果內(nèi)。
packOptions.ignore 和 packOptions.include 為一對象數(shù)組,對象元素類型如下:
| 字段名 | 類型 | 說明 |
|---|---|---|
| value | string | 路徑1或取值 |
| type | string | 類型 |
其中,type 可以取的值為 folder、file、suffix、prefix、regexp2、glob2,分別對應(yīng)文件夾、文件、后綴、前綴、正則表達(dá)式、Glob 規(guī)則。所有規(guī)則值都會自動(dòng)忽略大小寫。
注 1: value 字段的值若表示文件或文件夾路徑,以小程序目錄 (miniprogramRoot) 為根目錄。
注 2: regexp、glob 僅 1.02.1809260 及以上版本工具支持。
示例配置如下。
{
"packOptions": {
"ignore": [{
"type": "file",
"value": "test/test.js"
}, {
"type": "folder",
"value": "test"
}, {
"type": "suffix",
"value": ".webp"
}, {
"type": "prefix",
"value": "test-"
}, {
"type": "glob",
"value": "test/**/*.js"
}, {
"type": "regexp",
"value": "\\.jsx$"
}]
}
}
注: 這部分設(shè)置的更改可能需要重新打開項(xiàng)目才能生效。
# debugOptions
debugOptions 用以配置在對項(xiàng)目代碼進(jìn)行調(diào)試時(shí)的選項(xiàng)。
目前可以指定 debugOptions.hidedInDevtools 字段,用以配置調(diào)試時(shí)于調(diào)試器 Sources 面板隱藏源代碼的文件。
hidedInDevtools 的配置規(guī)則和 packOptions.ignore 是一致的。
當(dāng)某個(gè) js 文件符合此規(guī)則時(shí),調(diào)試器 Sources 面板中此文件源代碼正文內(nèi)容將被隱藏,顯示為:
// xxx.js has been hided by project.config.json
注:配置此規(guī)則后,可能需要關(guān)閉并重新打開項(xiàng)目才能看到效果。
項(xiàng)目配置示例:
{
"miniprogramRoot": "./src",
"qcloudRoot": "./svr",
"setting": {
"postcss": true,
"es6": true,
"minified": true,
"urlCheck": false,
"checkSiteMap": true,
"enhance": true,
"babelSetting": {
"ignore": [
"utils/something_not_to_process.js",
"miniprogram_npm/*",
"utils/already_handle/*"
]
}
},
"packOptions": {
"ignore": []
},
"debugOptions": {}
}
# watchOptions
watchOptions 用以配置項(xiàng)目中可以被忽略展示和監(jiān)聽文件變化的文件匹配規(guī)則。
部分項(xiàng)目(如游戲項(xiàng)目)其項(xiàng)目文件可能成千上萬,其中大部分可能是資源文件,并不是小程序和小游戲代碼中關(guān)心展示的文件,這些文件在工具開發(fā)時(shí)可以不需要被開發(fā)者關(guān)注,因此工具可以增加一個(gè)配置去忽略指定的文件和目錄,從而不對這些文件進(jìn)行文件遍歷獲取和文件內(nèi)容變更的監(jiān)聽(watch),從而提高開啟工具的速度以及減少工具打開占用的內(nèi)存。
目前可以指定 watchOptions.ignore 字段,用以配置工具時(shí)對符合指定規(guī)則的文件或文件夾進(jìn)行忽略(忽略的文件將不展示在編輯器文件列表和對該文件進(jìn)行監(jiān)聽),以避免展示和監(jiān)聽項(xiàng)目中不必要的文件內(nèi)容(這些文件或文件夾不需要去關(guān)心文件變化)
watchOptions.ignore 為 glob pattern 字符串?dāng)?shù)組,具體支持如下:
- 匹配0到多個(gè)字符
- ? 匹配一個(gè)字符
- [...] 匹配一個(gè)字符列表,類似正則表達(dá)式的字符列表
- !(pattern|pattern|pattern) 反向匹配括號內(nèi)的模式
- ?(pattern|pattern|pattern) 匹配0或1個(gè)括號內(nèi)的模式
- +(pattern|pattern|pattern) 匹配至少1個(gè)括號內(nèi)的模式
- *(pattern|pattern|pattern) 匹配0到多個(gè)括號內(nèi)的模式
- @(pattern|pat*|pat?erN) 精確匹配括號內(nèi)的模式
- ** 匹配0到多個(gè)子目錄,遞歸匹配子目錄
示例配置如下。
如下所示
{
"description": "項(xiàng)目配置文件",
"watchOptions": {
"ignore": [
"utils/util.js",
"libs/**/**"
]
}
}
注 1 : watchOptions.ignore 數(shù)組中的值若表示文件或文件夾路徑,以項(xiàng)目根目錄為基準(zhǔn)目錄。 注 2 : 由于文件遍歷和 watch 都是在項(xiàng)目啟動(dòng)時(shí)執(zhí)行,因此如果修改了 watchOptions 需要重新打開項(xiàng)目 注 3: 該配置僅 1.02.1910220 及以上版本工具支持。