前言
上次的文章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】,邀你加入技术交流群