mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-10-01 01:38:07 +08:00
Since we have the major version jump, we needed to update quite
a few things to make this work:
1. rollup4 ships with native binaries. We can't check them into
our node_modules for all platforms. Luckily they also ship a
a wasm version. This requires us to adjust the 'binary' path
to `node_modules/@rollup/wasm-node/dist/bin/rollup` instead.
2. rollup4 is more strict when it comes to ES modules vs
CommonJS. We adjust this by renaming the rollup config files.
3. Some plugins got deprecated so we had to replace them with
the newer versions (source maps and terser).
Bug: None
Change-Id: If13d590c8185db6ad85b3992d0a869111909dc8c
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/5999255
Commit-Queue: Simon Zünd <szuend@chromium.org>
Reviewed-by: Alex Rudenko <alexrudenko@chromium.org>
110 lines
3.5 KiB
JavaScript
110 lines
3.5 KiB
JavaScript
const { existsSync } = require('node:fs');
|
|
const path = require('node:path');
|
|
const { platform, arch, report } = require('node:process');
|
|
|
|
const isMusl = () => !report.getReport().header.glibcVersionRuntime;
|
|
|
|
const bindingsByPlatformAndArch = {
|
|
android: {
|
|
arm: { base: 'android-arm-eabi' },
|
|
arm64: { base: 'android-arm64' }
|
|
},
|
|
darwin: {
|
|
arm64: { base: 'darwin-arm64' },
|
|
x64: { base: 'darwin-x64' }
|
|
},
|
|
freebsd: {
|
|
arm64: { base: 'freebsd-arm64' },
|
|
x64: { base: 'freebsd-x64' }
|
|
},
|
|
linux: {
|
|
arm: { base: 'linux-arm-gnueabihf', musl: 'linux-arm-musleabihf' },
|
|
arm64: { base: 'linux-arm64-gnu', musl: 'linux-arm64-musl' },
|
|
ppc64: { base: 'linux-powerpc64le-gnu', musl: null },
|
|
riscv64: { base: 'linux-riscv64-gnu', musl: null },
|
|
s390x: { base: 'linux-s390x-gnu', musl: null },
|
|
x64: { base: 'linux-x64-gnu', musl: 'linux-x64-musl' }
|
|
},
|
|
win32: {
|
|
arm64: { base: 'win32-arm64-msvc' },
|
|
ia32: { base: 'win32-ia32-msvc' },
|
|
x64: { base: 'win32-x64-msvc' }
|
|
}
|
|
};
|
|
|
|
const msvcLinkFilenameByArch = {
|
|
arm64: 'vc_redist.arm64.exe',
|
|
ia32: 'vc_redist.x86.exe',
|
|
x64: 'vc_redist.x64.exe'
|
|
};
|
|
|
|
const packageBase = getPackageBase();
|
|
const localName = `./rollup.${packageBase}.node`;
|
|
const requireWithFriendlyError = id => {
|
|
try {
|
|
return require(id);
|
|
} catch (error) {
|
|
if (
|
|
platform === 'win32' &&
|
|
error instanceof Error &&
|
|
error.code === 'ERR_DLOPEN_FAILED' &&
|
|
error.message.includes('The specified module could not be found')
|
|
) {
|
|
const msvcDownloadLink = `https://aka.ms/vs/17/release/${msvcLinkFilenameByArch[arch]}`;
|
|
throw new Error(
|
|
`Failed to load module ${id}. ` +
|
|
'Required DLL was not found. ' +
|
|
'This error usually happens when Microsoft Visual C++ Redistributable is not installed. ' +
|
|
`You can download it from ${msvcDownloadLink}`,
|
|
{ cause: error }
|
|
);
|
|
}
|
|
|
|
throw new Error(
|
|
`Cannot find module ${id}. ` +
|
|
`npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828). ` +
|
|
'Please try `npm i` again after removing both package-lock.json and node_modules directory.',
|
|
{ cause: error }
|
|
);
|
|
}
|
|
};
|
|
|
|
const { parse, parseAsync, xxhashBase64Url, xxhashBase36, xxhashBase16 } = requireWithFriendlyError(
|
|
existsSync(path.join(__dirname, localName)) ? localName : `@rollup/rollup-${packageBase}`
|
|
);
|
|
|
|
function getPackageBase() {
|
|
const imported = bindingsByPlatformAndArch[platform]?.[arch];
|
|
if (!imported) {
|
|
throwUnsupportedError(false);
|
|
}
|
|
if ('musl' in imported && isMusl()) {
|
|
return imported.musl || throwUnsupportedError(true);
|
|
}
|
|
return imported.base;
|
|
}
|
|
|
|
function throwUnsupportedError(isMusl) {
|
|
throw new Error(
|
|
`Your current platform "${platform}${isMusl ? ' (musl)' : ''}" and architecture "${arch}" combination is not yet supported by the native Rollup build. Please use the WASM build "@rollup/wasm-node" instead.
|
|
|
|
The following platform-architecture combinations are supported:
|
|
${Object.entries(bindingsByPlatformAndArch)
|
|
.flatMap(([platformName, architectures]) =>
|
|
Object.entries(architectures).flatMap(([architectureName, { musl }]) => {
|
|
const name = `${platformName}-${architectureName}`;
|
|
return musl ? [name, `${name} (musl)`] : [name];
|
|
})
|
|
)
|
|
.join('\n')}
|
|
|
|
If this is important to you, please consider supporting Rollup to make a native build for your platform and architecture available.`
|
|
);
|
|
}
|
|
|
|
module.exports.parse = parse;
|
|
module.exports.parseAsync = parseAsync;
|
|
module.exports.xxhashBase64Url = xxhashBase64Url;
|
|
module.exports.xxhashBase36 = xxhashBase36;
|
|
module.exports.xxhashBase16 = xxhashBase16;
|