PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchSome links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.
A Puppeteer module-resolution failure usually falls into one of three layers: Node cannot find the top-level puppeteer-core package, Node cannot resolve an internal path such as puppeteer-core/internal/..., or the package loads but a browser executable is missing. Read the complete error first, then repair the layer it actually identifies.
The internal-path form is specifically associated in Puppeteer’s troubleshooting guidance with an old Node.js runtime or a custom resolver such as jest-resolve. The current Puppeteer system-requirements page lists Node.js 22.12 or later, so check the requirement for the Puppeteer release installed in your project rather than relying on an older tutorial.
1. Identify the exact failure
Do not treat every “module not found” message as the same problem. Copy the entire stack trace and classify the first missing name.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Fix the driver behind crashes, sound loss and screen glitches3Repair Windows errors before they cause bigger problemsThe package itself is missing
Messages such as Cannot find module 'puppeteer-core' mean Node did not find the package from the project that launched the script. The dependency may not be installed, may be declared in a different workspace, or the command may be running from the wrong directory.
#1 Best Overall
An internal path is missing
A message like Cannot find module 'puppeteer-core/internal/...' is a different case. Puppeteer’s troubleshooting page lists Node.js versions below 14 and custom resolvers, including jest-resolve, as possible causes. The same page suggests upgrading the resolver or its parent package, such as Jest, when a custom resolver is involved.
The browser executable is missing
If the package imports successfully but launch fails with an executable or browser-not-found message, JavaScript module resolution is already working. puppeteer-core does not download Chrome and expects your project or a remote service to provide a browser. Fix the browser path or connection separately.
2. Verify the project and dependency
- Run the check in the executing project. Open the directory, package workspace, or container from which Node actually starts the script. In a monorepo, the package that owns the script must be able to resolve the dependency; installing it only at an unrelated workspace level may not be sufficient.
- Inspect the dependency declaration. Confirm that
puppeteer-coreappears in that project’sdependenciesordevDependencies, as appropriate for your deployment process. A global installation does not make a package reliably importable from an application. - Reinstall with the project’s package manager. Use the lockfile and package manager already used by the repository. For npm, that commonly means
npm install(ornpm ciin a clean, lockfile-controlled build); for Yarn or pnpm, use the corresponding install command. Do not mix package managers while diagnosing the same lockfile. - Check what Node can resolve. From the same directory and with the same Node binary used by the failing command, run
node -p "require.resolve('puppeteer-core/package.json')"in a CommonJS-capable project. If your project is ESM-only and that expression is unsuitable, inspect the installed package with your package manager and test an import in a small file instead. - Remove stale installation state only when necessary. If the dependency is declared but resolution still fails, stop running processes, remove the project’s installed dependency directory, and reinstall from the lockfile. Preserve the lockfile unless you intentionally want to recalculate versions.
3. Use the correct import and module format
The official installation guidance demonstrates this ESM import:
Free tools Windows power users keep installed
One-click scans. No signup required.
import puppeteer from 'puppeteer-core';
Use the package name exactly. A path copied from an internal stack trace is not a supported replacement for the public package import.
Rank #2
ES modules
For ESM, ensure the project’s module settings and file extension agree with the syntax. Depending on the project, that can mean a suitable "type": "module" declaration or an .mjs file. Also verify that the Node version used in production supports the module behavior required by the installed Puppeteer release.
CommonJS
In a CommonJS project, use the package’s supported CommonJS form for the version you installed, or migrate the calling file to ESM if that release is ESM-only. Do not assume an import example from an older Puppeteer version still applies after an upgrade.
Bundlers and test runners
Jest, older Webpack configurations, serverless bundlers, and other resolvers can interpret package export maps differently from Node. First reproduce the import with plain Node from the project directory. If plain Node works but the test or build tool fails, update that tool and its resolver configuration rather than changing Puppeteer’s internal files.
4. Fix the internal-path error
Check Node against the installed release
The troubleshooting note calls out Node versions below 14 for the internal-path failure. That is a diagnostic condition described for this error, not the current general support promise. Puppeteer’s current system-requirements page lists Node 22.12 or later (the page displayed release 25.12.0 when checked). Compare node --version with the requirement for your installed Puppeteer version and upgrade Node through your organization’s supported method.
Rank #3
Update a custom resolver
If the stack trace passes through jest-resolve or another custom resolver, update that resolver and its parent package when an update is available. For Jest, upgrade Jest as a coordinated dependency rather than forcing a random resolver version. Reinstall dependencies, clear the test runner’s cache if your workflow uses one, and rerun the smallest test that imports Puppeteer.
Check for mixed package versions
Duplicate or mismatched Puppeteer packages can leave a resolver looking for an internal file that belongs to another version. Inspect the dependency tree with your package manager, identify which package requires puppeteer-core, and make the application and its plugins converge on compatible versions. Avoid importing files from node_modules/puppeteer-core/internal; internal paths can change without being a public API.
5. Understand puppeteer versus puppeteer-core
| Choice | Browser management | Typical reason to choose it | Important behavior |
|---|---|---|---|
puppeteer |
Puppeteer’s end-user workflow | You want the default workflow and automatic browser download | Designed to provide those defaults during installation and launch |
puppeteer-core |
Your project or a remote service | You already manage a local browser or connect to a remote browser | Does not download Chrome and has no assumed browser defaults; provide an executable path, channel, or connection details |
Changing packages is not a fix for a resolver error by itself. Choose the package that matches your browser-management model, then install and import that package consistently. If your code needs a downloaded browser and you do not want to maintain one, the full puppeteer package may be the more appropriate dependency. If your infrastructure supplies Chrome or a remote endpoint, keep puppeteer-core and configure that endpoint explicitly.
6. Do not expect Puppeteer configuration to repair resolution
Puppeteer’s configuration guide states that configuration files and environment variables are ignored by puppeteer-core. Settings intended to control the full puppeteer package therefore cannot make a missing puppeteer-core import appear. Resolve installation, Node, module format, and resolver compatibility first.
Rank #4
7. Account for upgrades and ESM-only releases
The official changelog records transitions to ESM-only packages and raised Node.js minimums. If the error started immediately after an upgrade, capture the installed versions before changing anything:
node --version
npm ls puppeteer puppeteer-core jest jest-resolve
Then compare those versions with the release documentation and your project’s module format. A successful fix may be upgrading Node and the resolver, adapting the import, or deliberately pinning a compatible release while you schedule a migration. Do not copy an old CommonJS recipe into a release that requires ESM, and do not downgrade blindly without checking security and browser-compatibility consequences.
8. Browser launch after the import works
Once Node resolves the package, configure the browser separately. With core, launch code normally needs one of the following:
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
- An explicit executable path to a browser installed and maintained by your environment.
- A standard browser channel that exists on the machine.
- A remote browser connection supplied by your infrastructure.
A launch-time “executable not found” error proves that the module-resolution stage succeeded. Check the path inside the same container, user account, and operating system where the script runs; a path valid on a laptop may not exist in CI.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.9. Troubleshooting matrix
| Symptom | Likely layer | Action |
|---|---|---|
Cannot find module 'puppeteer-core' |
Dependency or workspace | Install and declare puppeteer-core in the executing project; verify with require.resolve or a test import. |
Cannot find module 'puppeteer-core/internal/...' |
Runtime, custom resolver, or mixed versions | Check Node, update Jest or the resolver, inspect duplicate versions, and avoid internal imports. |
| Import succeeds; browser executable is missing | Browser provisioning | Install or expose the browser, pass its path/channel, or connect remotely. |
| Works with Node but fails in Jest/build | Toolchain resolver | Update the toolchain and align its ESM/CommonJS settings with the installed release. |
| Started after Puppeteer upgrade | Release compatibility | Review changelog requirements, Node version, module format, and resolver support before changing application code. |
Or skip the browser setup
If your goal is simply to obtain a reliable website screenshot, ScreenshotNeo provides an API instead of requiring a local Puppeteer installation. It accepts consent banners before capture and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each cleanup step can be disabled. Bot checks, CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and the response identifies the page verdict and billing status in X-Page-Verdict and X-Billed headers. Its MCP server exposes take_screenshot, get_page_info, and capture_pdf to Claude, Cursor, and other MCP clients.
One request is enough:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
See the complete options and authentication details in the ScreenshotNeo documentation. The service supports PNG, JPEG, WebP, and PDF output; full-page and selector captures; dark mode, device presets, arbitrary viewports, retina scale, PDF paper and page controls; custom CSS and JavaScript; clicks, waits, request blocking, headers, cookies, user agents, authorization, timezone, geolocation, transparency, resizing, chosen cache TTLs, signed image links, asynchronous webhooks, bulk capture of up to 100 URLs per call, usage reporting, and an OpenAPI specification.
The Free plan includes 1,000 screenshots each month with no card. Paid plans start at $5 for 3,000 shots; every feature is available on every plan. Create a free ScreenshotNeo account to try the API.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →10. Practical checklist
- Copy the complete error and distinguish the package name from an internal path.
- Run diagnostics from the project and workspace that actually launch Node.
- Declare and install the matching Puppeteer package with one package manager.
- Use the public
puppeteer-coreimport, not an internal file path. - Check your Node version against the installed release; the current requirements page lists Node 22.12 or later.
- For internal-path failures, update custom resolvers such as Jest and inspect duplicate versions.
- Keep browser provisioning separate from JavaScript module resolution.
- Remember that core ignores Puppeteer configuration files and environment variables.
- After upgrades, reassess ESM/CommonJS mode, resolver support, and Node requirements together.
Frequently Asked Questions
Can I fix this by installing Chrome?
Only if the error occurs after the package import and reports a missing browser executable. Installing Chrome does not repair a missing JavaScript package or an unresolved internal module path.
Should I import a file under puppeteer-core/internal?
No. Internal paths are implementation details. Import the public package name and update the resolver or dependency versions that produced the internal-path failure.
Is Node 14 the supported Puppeteer minimum?
No. Below-14 is a condition named in the troubleshooting note for one internal-path error. The current general requirements page lists Node 22.12 or later; verify the requirement for your installed release.
Why does the same dependency work in a shell but not in CI?
CI may use a different working directory, Node binary, workspace, install mode, or module-resolution tool. Compare those environments and run the resolution test inside the failing job.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

