為您的下一個應用程序使用一致的,基於git的構建ID
小軟件包在多服務器部署中的每個服務器上運行next build時,為您的下一個應用程序生成一致的,基於git的構建ID。
該模塊導出一個可以用作next.config.js中的generateBuildID配置選項的函數。
默認情況下,它將使用本地GIT存儲庫(相當於git rev-parse HEAD )的最新git commit Hash:
// next.config.js
const nextBuildId = require ( 'next-build-id' )
module . exports = {
generateBuildId : ( ) => nextBuildId ( { dir : __dirname } )
}
// => 'f9fc968afa249d162c924a8d5b4ce6562c164c2e'如果您寧願使用相對於git reto中最新標籤的構建ID,請describe: true作為選項,而git describe --tags將被使用:
// next.config.js
const nextBuildId = require ( 'next-build-id' )
module . exports = {
generateBuildId : ( ) => nextBuildId ( { dir : __dirname , describe : true } )
}
// => 'v1.0.0' (no changes since v1.0.0 tag)
// => 'v1.0.0-19-ga8f7eee' (19 changes since v1.0.0 tag)該模塊還將公開一個同步版本以滿足自定義需求,例如將構建ID直接傳遞給哨兵配置。只需致電nextBuildId.sync({ dir: __dirname }) 。
如果您在沒有會話親和力的情況下運行了坐在負載平衡器後面的多個實例(並且您直接在每個生產服務器上構建應用程序而不是預包裝),則需要這樣的工具來避免Next.js錯誤,例如“無效的構建文件哈希”,當同一客戶端(瀏覽器代碼(瀏覽器代碼)對多個服務器後端服務器(nondode Server)對話時,它會發生不同的構建ID構建ID。
您的應用程序使用的構建ID存儲在文件系統中的BUILD_ID文本文件中的構建目錄中,默認情況下為.next 。
$ npm i next-build-id 該模塊導出兩個函數,一個功能是異步( nextBuildId()主導出),一個是同步的( nextBuildId.sync() )。這兩個功能都接受單個選項對象,支持下面列出的相同選項。兩個函數都返回(或解析為)字符串,代表基於GIT的構建ID。
支持的選項是:
dir (字符串,默認process.cwd() ):本地git存儲庫中的目錄
通常使用__dirname 。通常是安全的。假定默認值是您正在運行next build命令的目錄,但是根據您構建下一個js應用程序的方式,這可能不是正確的。
describe (布爾值,默認false ):使用git標籤描述代替最新提交sha
將其true為使用git describe --tags而不是用於生成構建ID的git rev-parse HEAD 。如果您本地的GIT存儲庫中沒有標籤,則將使用最新的提交SHA,除非您還指定了fallbackToSha: false 。
fallbackToSha (布爾值,默認為true ): describe: true和不存在標籤
僅在使用describe: true 。如果您想嚴格要求使用標籤的使用(和存在),則使用fallbackToSha: false禁用此標籤,在這種情況下,如果不存在標籤,則會丟棄錯誤。
請注意,該模塊確實提供了一種通用方法來獲取任何本地GIT存儲庫的ID或狀態字符串,這意味著它並未直接與Next.js綁定。 JS以任何方式 - 僅取決於您的使用方式。
ISC©Andrew Goode