前言
上次的文章Hello Playwright:(1)從開發到部署發表后,有網友留言問,有不有簡化部署的方式:
下面,提供 2 種可行的方案。
方案 1. Copy
其實 Playwright 默認是到C:\Users\用戶名\AppData\Local\ms-playwright
文件夾下查找依賴的瀏覽器,我們只需將本機文件夾復制到部署機器的對應文件夾即可。
但更簡便的方式,是將瀏覽器也放到發布文件夾下一起部署。
具體做法如下:
修改代碼,設置查找依賴瀏覽器路徑的環境變量:
static?async?Task?Main(string[]?args)
{Environment.SetEnvironmentVariable("PLAYWRIGHT_BROWSERS_PATH",?Path.Combine(AppDomain.CurrentDomain.BaseDirectory,?"ms-playwright"));var?playwright?=?await?Playwright.CreateAsync();...
}
修改項目文件,設置發布時執行 Task,復制 ms-playwright 文件夾到發布文件夾下:
<Target?Name="PublishPlaywright"?AfterTargets="Publish"><ItemGroup><PlaywrightFiles?Include="$(LOCALAPPDATA)\ms-playwright\**\*.*"?/></ItemGroup><CopySourceFiles="@(PlaywrightFiles)"DestinationFiles="$(PublishDir)\ms-playwright\%(RecursiveDir)%(Filename)%(Extension)"/>
</Target>
按照正常流程發布
現在將發布文件夾復制到另一臺機器上,無需運行瀏覽器安裝命令,直接運行控制臺程序。
控制臺程序將讀取 EXE 當前所在文件夾下的ms-playwright
文件夾,獲取依賴的瀏覽器。
但是,這種方式有個明顯的缺點——開發和部署的計算機的操作系統必須一致,比如, Windows 開發機上的瀏覽器文件不能發布到 Linux 上運行。
這時,可以采用方案 2。
方案 2. 自動安裝
方案 2 還是需要運行瀏覽器安裝命令,但是從手工運行改成由代碼運行:
static?async?Task?Main(string[]?args)
{Console.WriteLine("Start?download?chromium");var?exitCode?=?Microsoft.Playwright.Program.Main(new[]?{?"install",?"chromium"?});if?(exitCode?!=?0){throw?new?Exception($"Playwright?exited?with?code?{exitCode}");}var?playwright?=?await?Playwright.CreateAsync();...
}
需要注意的是,部署模式一定要選“獨立”,否則對應操作系統的安裝腳本不會復制到發布文件夾。(我發現 v1.21?存在此?bug,已提交 issue 并修復)
按照正常流程發布,直接運行控制臺程序。
控制臺程序將自動執行瀏覽器安裝命令:
結論
2 種簡化部署方案,是否能夠滿足你的需要?歡迎留言反饋!
添加微信號【MyIO666】,邀你加入技術交流群