mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
feat: support configuring the browser download path (#6014)
By adding support for an environment variable `PUPPETEER_DOWNLOAD_PATH` it is possible to support downloading the browser binaries into a folder outside the `node_modules` folder. This makes it possible to preserve previously downloaded binaries in order to skip downloading them again.
This commit is contained in:
parent
615cd37f96
commit
13ea347c7d
@ -411,6 +411,7 @@ If Puppeteer doesn't find them in the environment during the installation step,
|
||||
- `HTTP_PROXY`, `HTTPS_PROXY`, `NO_PROXY` - defines HTTP proxy settings that are used to download and run Chromium.
|
||||
- `PUPPETEER_SKIP_CHROMIUM_DOWNLOAD` - do not download bundled Chromium during installation step.
|
||||
- `PUPPETEER_DOWNLOAD_HOST` - overwrite URL prefix that is used to download Chromium. Note: this includes protocol and might even include path prefix. Defaults to `https://storage.googleapis.com`.
|
||||
- `PUPPETEER_DOWNLOAD_PATH` - overwrite the path for the downloads folder. Defaults to `<root>/.local-chromium`, where `<root>` is puppeteer's package root.
|
||||
- `PUPPETEER_CHROMIUM_REVISION` - specify a certain version of Chromium you'd like Puppeteer to use. See [puppeteer.launch([options])](#puppeteerlaunchoptions) on how executable path is inferred. **BEWARE**: Puppeteer is only [guaranteed to work](https://github.com/puppeteer/puppeteer/#q-why-doesnt-puppeteer-vxxx-work-with-chromium-vyyy) with the bundled Chromium, use at your own risk.
|
||||
- `PUPPETEER_EXECUTABLE_PATH` - specify an executable path to be used in `puppeteer.launch`. See [puppeteer.launch([options])](#puppeteerlaunchoptions) on how the executable path is inferred. **BEWARE**: Puppeteer is only [guaranteed to work](https://github.com/puppeteer/puppeteer/#q-why-doesnt-puppeteer-vxxx-work-with-chromium-vyyy) with the bundled Chromium, use at your own risk.
|
||||
- `PUPPETEER_PRODUCT` - specify which browser you'd like Puppeteer to use. Must be one of `chrome` or `firefox`. This can also be used during installation to fetch the recommended browser binary. Setting `product` programmatically in [puppeteer.launch([options])](#puppeteerlaunchoptions) supersedes this environment variable. The product is exposed in [`puppeteer.product`](#puppeteerproduct)
|
||||
|
@ -20,9 +20,10 @@ if (require('./package.json').name === 'puppeteer-core')
|
||||
return;
|
||||
|
||||
const downloadHost = process.env.PUPPETEER_DOWNLOAD_HOST || process.env.npm_config_puppeteer_download_host || process.env.npm_package_config_puppeteer_download_host;
|
||||
const downloadPath = process.env.PUPPETEER_DOWNLOAD_PATH || process.env.npm_config_puppeteer_download_path || process.env.npm_package_config_puppeteer_download_path;
|
||||
|
||||
const puppeteer = require('./index');
|
||||
const browserFetcher = puppeteer.createBrowserFetcher({ host: downloadHost, product: 'firefox' });
|
||||
const browserFetcher = puppeteer.createBrowserFetcher({ host: downloadHost, product: 'firefox', path: downloadPath });
|
||||
|
||||
const revision = require('./package.json').puppeteer.firefox_revision;
|
||||
|
||||
|
@ -231,7 +231,10 @@ class Launcher {
|
||||
}
|
||||
|
||||
_resolveExecutablePath() {
|
||||
const browserFetcher = new BrowserFetcher(this._projectRoot, { product: 'firefox' });
|
||||
const downloadPath = process.env.PUPPETEER_DOWNLOAD_PATH ||
|
||||
process.env.npm_config_puppeteer_download_path ||
|
||||
process.env.npm_package_config_puppeteer_download_path;
|
||||
const browserFetcher = new BrowserFetcher(this._projectRoot, { product: 'firefox', path: downloadPath });
|
||||
const revisionInfo = browserFetcher.revisionInfo(this._preferredRevision);
|
||||
const missingText = !revisionInfo.local ? `Firefox revision is not downloaded. Run "npm install" or "yarn install"` : null;
|
||||
return {executablePath: revisionInfo.executablePath, missingText};
|
||||
|
@ -35,9 +35,14 @@ export async function downloadBrowser() {
|
||||
process.env.npm_config_puppeteer_product ||
|
||||
process.env.npm_package_config_puppeteer_product ||
|
||||
'chrome';
|
||||
const downloadPath =
|
||||
process.env.PUPPETEER_DOWNLOAD_PATH ||
|
||||
process.env.npm_config_puppeteer_download_path ||
|
||||
process.env.npm_package_config_puppeteer_download_path;
|
||||
const browserFetcher = puppeteer.createBrowserFetcher({
|
||||
product,
|
||||
host: downloadHost,
|
||||
path: downloadPath,
|
||||
});
|
||||
const revision = await getRevision();
|
||||
await fetchBinary(revision);
|
||||
|
@ -744,6 +744,7 @@ function getWSEndpoint(browserURL: string): Promise<string> {
|
||||
function resolveExecutablePath(
|
||||
launcher: ChromeLauncher | FirefoxLauncher
|
||||
): { executablePath: string; missingText?: string } {
|
||||
let downloadPath: string;
|
||||
// puppeteer-core doesn't take into account PUPPETEER_* env variables.
|
||||
if (!launcher._isPuppeteerCore) {
|
||||
const executablePath =
|
||||
@ -757,9 +758,14 @@ function resolveExecutablePath(
|
||||
: null;
|
||||
return { executablePath, missingText };
|
||||
}
|
||||
downloadPath =
|
||||
process.env.PUPPETEER_DOWNLOAD_PATH ||
|
||||
process.env.npm_config_puppeteer_download_path ||
|
||||
process.env.npm_package_config_puppeteer_download_path;
|
||||
}
|
||||
const browserFetcher = new BrowserFetcher(launcher._projectRoot, {
|
||||
product: launcher.product,
|
||||
path: downloadPath,
|
||||
});
|
||||
if (!launcher._isPuppeteerCore && launcher.product === 'chrome') {
|
||||
const revision = process.env['PUPPETEER_CHROMIUM_REVISION'];
|
||||
|
Loading…
Reference in New Issue
Block a user