2064d27dc6
Browser registry is responsible for 3 things:
1. Remove downloaded browsers if there are no packages that refer to them
2. Install default browsers needed for the current package
3. Install browsers on-demand when used through Playwright CLI
Currently, registry relies on a single "download" field in `browsers.json`
to carry both (1) and (2). However, browsers in (3) are marked as
`download: false` so that they aren't installed automatically in (2), so
auto-remove procedure in (1) removes them on subsequent installation.
One possible approach to fix this would be modifying package's `browsers.json` to
change `download: false` to `true` when browsers are installed with
Playwright CLI. This approach was explored here:
|
||
---|---|---|
.. | ||
common | ||
installation-tests | ||
playwright-android | ||
playwright-chromium | ||
playwright-core | ||
playwright-electron | ||
playwright-firefox | ||
playwright-webkit | ||
.gitignore | ||
build_package.js | ||
README.md |
Managing and Publishing Playwright Packages
Overview
- Playwright ships multiple packages to NPM. All packages that are published to NPM are listed as folders under
//packages/
. - Playwright's root package.json is never published to NPM. It is only used for devmode, e.g. when running
npm install
with no arguments or installing from github. - Playwright dependencies for all packages are the same and are managed with the
root package.json
. - Playwright browser versions for all packages are the same and are managed with the
browsers.json
.
Note
As of May 20, 2020, the only exception is the
playwright-electron
package that doesn't follow the pack and is published manually. This is due to it's pre-1.0 status.
Building NPM package
To build a package that will be shipped to NPM, use //packages/build_package.js
script.
The script populates package folder with contents, and then uses npm pack
to archive the folder.
As of May 20, 2020, //packages/build_package.js
does the following:
- copies certain files and folders from
playwright-internal
to the subpackage (e.g.//lib
,//types
,//LICENSE
etc) - generates
package.json
and puts it in the subpackage - generates
browsers.json
and puts it in the subpackage - uses
npm pack
to pack the subpackage folder - removes all the files that were added during the process
To build playwright
package and save result as ./playwright.tgz
file:
$ ./packages/build_package.js playwright ./playwright.tgz
To debug what files are put into the folder, use --no-cleanup
flag and inspect the package folder:
$ ./packages/build_package.js playwright ./playwright.tgz --no-cleanup
$ ls ./packages/playwright # inspect the folder
Testing packages
To test packages, use //packages/installation-tests/installation-tests.sh
.
Publishing packages
All package publishing happens exclusively over CI/CD using the //utils/publish_all_packages.sh
script.
Special handling for playwright-electron
playwright-electron
version is pre-1.0.0 and thus managed separately. It's specified inside the//packages/build_package.js
file.playwright-electron
is published manually.
To publish a new version of playwright-electron
:
- Bump
playwright-electron
version inside//packages/build_package.js
- Submit PR with the updated version
- Build package with
./build_package.js playwright-electron ./playwright-electron.tgz
- Publish package with
npm publish playwright-electron.tgz