{"id":15434281,"url":"https://github.com/cenfun/puppeteer-chromium-resolver","last_synced_at":"2025-06-23T10:36:58.676Z","repository":{"id":41186747,"uuid":"151195575","full_name":"cenfun/puppeteer-chromium-resolver","owner":"cenfun","description":"Tool to resolve puppeteer and chromium faster","archived":false,"fork":false,"pushed_at":"2025-03-31T13:09:09.000Z","size":96,"stargazers_count":71,"open_issues_count":0,"forks_count":14,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-06-11T13:17:47.091Z","etag":null,"topics":["cache","chromium","headless-chrome","launchable","mirror","puppeteer","resolver"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/puppeteer-chromium-resolver","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cenfun.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-10-02T03:31:49.000Z","updated_at":"2025-04-07T16:27:27.000Z","dependencies_parsed_at":"2024-06-18T15:30:06.763Z","dependency_job_id":"28d28918-5957-4483-9b63-487128780906","html_url":"https://github.com/cenfun/puppeteer-chromium-resolver","commit_stats":{"total_commits":113,"total_committers":2,"mean_commits":56.5,"dds":"0.18584070796460173","last_synced_commit":"991a4688d86d6f1e3b3fb2adf365e4a11393c599"},"previous_names":[],"tags_count":42,"template":false,"template_full_name":null,"purl":"pkg:github/cenfun/puppeteer-chromium-resolver","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cenfun%2Fpuppeteer-chromium-resolver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cenfun%2Fpuppeteer-chromium-resolver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cenfun%2Fpuppeteer-chromium-resolver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cenfun%2Fpuppeteer-chromium-resolver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cenfun","download_url":"https://codeload.github.com/cenfun/puppeteer-chromium-resolver/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cenfun%2Fpuppeteer-chromium-resolver/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261463014,"owners_count":23162072,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cache","chromium","headless-chrome","launchable","mirror","puppeteer","resolver"],"created_at":"2024-10-01T18:38:38.339Z","updated_at":"2025-06-23T10:36:53.661Z","avatar_url":"https://github.com/cenfun.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Puppeteer Chromium Resolver\n\u003e Tool to resolve puppeteer and chromium faster, detect local installed chromium, download chromium with custom mirror host, cache chromium revision out of node_modules, test chromium headless being launchable.\n\n![](https://img.shields.io/npm/v/puppeteer-chromium-resolver)\n![](https://img.shields.io/librariesio/github/cenfun/puppeteer-chromium-resolver)\n![](https://img.shields.io/librariesio/dependents/npm/puppeteer-chromium-resolver)\n[![](https://badgen.net/npm/dw/puppeteer-chromium-resolver)](https://www.npmjs.com/package/puppeteer-chromium-resolver)\n![](https://img.shields.io/github/license/cenfun/puppeteer-chromium-resolver)\n\n* Tool to customize [puppeteer](https://github.com/GoogleChrome/puppeteer)\n* Detect local chromium automatically\n* Download chromium from custom mirror host\n* Cache chromium to custom local folder\n* Try launching chromium and resolve launchable and version\n* Resolve chromium executablePath and puppeteer\n\n\n## Install \n```sh\nnpm i puppeteer-chromium-resolver\n```\n## Usage\n### [Async] dynamic detection and downloading chromium\n```js\nconst PCR = require(\"puppeteer-chromium-resolver\");\nconst options = {};\nconst stats = await PCR(options);\nconst browser = await stats.puppeteer.launch({\n    headless: false,\n    args: [\"--no-sandbox\"],\n    executablePath: stats.executablePath\n}).catch(function(error) {\n    console.log(error);\n});\nconst page = await browser.newPage();\nawait page.goto(\"https://www.npmjs.com/package/puppeteer-chromium-resolver\");\nawait browser.close();\n```\n\n### [Sync] chromium will be pre-downloaded when PCR installation, so calling getStats() will get PCR stats from previous installation.\n```js\nconst PCR = require(\"puppeteer-chromium-resolver\");\nconst options = {};\nconst stats = PCR.getStats(options);\nif (stats) {\n    stats.puppeteer.launch({\n        headless: false,\n        args: [\"--no-sandbox\"],\n        executablePath: stats.executablePath\n    }).then(function(browser){\n        //...\n    }).catch(function(error) {\n        console.log(error);\n    });\n}\n```\n\n## Default Options\n```js\nconst options = {\n    // the chromium revision to use\n    // default is puppeteer.PUPPETEER_REVISIONS.chromium\n    // or you can use PUPPETEER_REVISION environment variable\n    revision: '',\n\n    // additional path to detect local chromium copy (separate with a comma if multiple paths)\n    detectionPath: '',\n\n    // custom path to download chromium to local, require dir permission: 0o777\n    // default is user home dir\n    downloadPath: '',\n\n    // the folder name for chromium snapshots (maybe there are multiple versions)\n    folderName: '.chromium-browser-snapshots',\n\n    // the stats file name, cache stats info for latest installation\n    statsName: '.pcr-stats.json',\n\n    // default hosts are ['https://storage.googleapis.com']\n    // or you can use PUPPETEER_DEFAULT_HOST environment variable\n    hosts: [],\n\n    cacheRevisions: 2,\n    retry: 3,\n    silent: false\n};\n\n```\nsee [lib/options.js](/lib/options.js)\n\n### Option from root package.json with \"pcr\" object\n```json\n{\n    // ...\n    \"pcr\": {\n        \"revision\": \"1138907\"\n    }\n}\n```\n\n## Return Stats\n|Property        | Type    |                          |\n| :--------------| :------ | :----------------------  |\n|revision        | String  |current chromium revision |\n|executablePath  | String  |chromium executable path  |\n|chromiumVersion | String  |chromium version          |\n|launchable      | Boolean |chromium launchable       |\n|puppeteerVersion| String  |puppeteer version         |\n|puppeteer       | Object  |puppeteer module          |\n\n\n## Test Cases\nsee [test/test.js](/test/test.js)\n\n### How to make puppeteer work with puppeteer-chromium-resolver\n* 1, Sets env PUPPETEER_SKIP_DOWNLOAD to skip download Chromium when installation (.npmrc)\n```\nPUPPETEER_SKIP_DOWNLOAD=true\n```\n* 2, Sets env PUPPETEER_EXECUTABLE_PATH to PCR executablePath globally or pass in launch option executablePath\n```js\n(async () =\u003e {\n\n    const PCR = require(\"puppeteer-chromium-resolver\");\n    const puppeteer = require(\"puppeteer\");\n    const stats = await PCR({});\n    //update global env\n    process.env.PUPPETEER_EXECUTABLE_PATH = stats.executablePath;\n\n    //or specify executablePath\n    const browser = await puppeteer.launch({\n        executablePath: stats.executablePath,\n        headless: false\n    });\n\n})();\n```\n\n## Troubleshooting\n- CentOS: error while loading shared libraries: libatk-1.0.so.0: cannot open shared objecsuch file or directory\n```sh\n# Install dependencies:\nyum install -y alsa-lib.x86_64 \\\natk.x86_64 \\\ncups-libs.x86_64 \\\ngtk3.x86_64 \\\nipa-gothic-fonts \\\nlibXcomposite.x86_64 \\\nlibXcursor.x86_64 \\\nlibXdamage.x86_64 \\\nlibXext.x86_64 \\\nlibXi.x86_64 \\\nlibXrandr.x86_64 \\\nlibXScrnSaver.x86_64 \\\nlibXtst.x86_64 \\\npango.x86_64 \\\nxorg-x11-fonts-100dpi \\\nxorg-x11-fonts-75dpi \\\nxorg-x11-fonts-cyrillic \\\nxorg-x11-fonts-misc \\\nxorg-x11-fonts-Type1 \\\nxorg-x11-utils\n\n# After installing dependencies you need to update nss library:\nyum update nss -y\n```\n- Debian (e.g. Ubuntu): error while loading shared libraries: libgobject-2.0.so.0: cannot open shared object file: No such file or directory\n```sh\nsudo apt-get install -y ca-certificates fonts-liberation libasound2 libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libglib2.0-0 libgtk-3-0 libnspr4 libnss3 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 lsb-release wget xdg-utils\n```\nmore [https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md](https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md)\n\n## CHANGELOG \n[CHANGELOG.md](CHANGELOG.md)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcenfun%2Fpuppeteer-chromium-resolver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcenfun%2Fpuppeteer-chromium-resolver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcenfun%2Fpuppeteer-chromium-resolver/lists"}