expo prebuild fails with tar v7 due to _interopRequireDefault assuming no default export
Summary
expo prebuild crashes with Cannot read properties of undefined (reading 'extract') when tar v7 is resolved in the dependency tree (e.g. via a package manager override).
Root cause
@expo/cli imports tar using Babel's _interopRequireDefault:
// node_modules/@expo/cli/build/src/utils/npm.js:63
const data = _interopRequireDefault(require("tar"));
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : { default: obj };
}
tar v6 does not set __esModule, so the wrapper creates { default: tarModule } and _tar().default.extract(...) works.
tar v7 sets __esModule: true but only exports named exports (no default export). So _interopRequireDefault returns the module as-is, and _tar().default resolves to undefined, causing the crash.
The failing call is in extractNpmTarballAsync:
// node_modules/@expo/cli/build/src/utils/npm.js:173
await pipeline(stream, transformStream, _tar().default.extract({
cwd, filter, onentry, strip
}, fileList));
Reproduction
- Create an Expo SDK 52 project using pnpm
- Add a
tar override to v7 in package.json:
"pnpm": {
"overrides": {
"tar": "7.5.11"
}
}
- Run
pnpm install && npx expo prebuild --clean
Expected: Prebuild succeeds
Actual: Cannot read properties of undefined (reading 'extract')
Environment
| Dependency |
Version |
| Expo SDK |
52 |
@expo/cli |
bundled with expo@~52.0.46 |
tar |
7.5.11 |
| Node |
v24.14.0 |
| Package manager |
pnpm 10.11.0 |
Suggested fix
Revert back to v6 or bump expo
expo prebuildfails withtarv7 due to_interopRequireDefaultassuming nodefaultexportSummary
expo prebuildcrashes withCannot read properties of undefined (reading 'extract')whentarv7 is resolved in the dependency tree (e.g. via a package manager override).Root cause
@expo/cliimportstarusing Babel's_interopRequireDefault:tarv6 does not set__esModule, so the wrapper creates{ default: tarModule }and_tar().default.extract(...)works.tarv7 sets__esModule: truebut only exports named exports (nodefaultexport). So_interopRequireDefaultreturns the module as-is, and_tar().defaultresolves toundefined, causing the crash.The failing call is in
extractNpmTarballAsync:Reproduction
taroverride to v7 inpackage.json:pnpm install && npx expo prebuild --cleanExpected: Prebuild succeeds
Actual:
Cannot read properties of undefined (reading 'extract')Environment
@expo/cliexpo@~52.0.46tarSuggested fix
Revert back to v6 or bump expo