mirror of
https://gitcode.com/gh_mirrors/re/react-native-pushy.git
synced 2025-09-16 07:11:39 +08:00
93 lines
2.8 KiB
JavaScript
93 lines
2.8 KiB
JavaScript
const ownPackageJson = require('../package.json');
|
|
|
|
if (process.env.npm_package_name === ownPackageJson.name) {
|
|
console.log('Skipping postinstall during local development.');
|
|
process.exit(0);
|
|
}
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const projectRoot = path.resolve(__dirname, '..'); // react-native-update module root
|
|
const expoConfigPath = path.resolve(projectRoot, 'expo-module.config.json');
|
|
|
|
function getExpoMajorVersion() {
|
|
let resolvedExpoPackagePath;
|
|
try {
|
|
// Use require.resolve to find expo's package.json from the host project's perspective
|
|
resolvedExpoPackagePath = require.resolve('expo/package.json', {
|
|
paths: [path.resolve(projectRoot, '..', '..')],
|
|
});
|
|
} catch (e) {
|
|
console.log(
|
|
'Expo not found in project node_modules (via require.resolve).',
|
|
);
|
|
return null; // Expo not found or resolvable
|
|
}
|
|
|
|
// Check if the resolved path actually exists (belt-and-suspenders)
|
|
if (!fs.existsSync(resolvedExpoPackagePath)) {
|
|
console.log(
|
|
`Expo package.json path resolved to ${resolvedExpoPackagePath}, but file does not exist.`,
|
|
);
|
|
return null;
|
|
}
|
|
|
|
try {
|
|
const packageJson = JSON.parse(
|
|
fs.readFileSync(resolvedExpoPackagePath, 'utf8'),
|
|
);
|
|
const version = packageJson.version;
|
|
if (!version) {
|
|
console.log('Expo package.json does not contain a version.');
|
|
return null; // Version not found
|
|
}
|
|
|
|
// Extract the first number sequence as the major version
|
|
const match = version.match(/\d+/);
|
|
if (!match) {
|
|
console.log(
|
|
`Could not parse major version from Expo version string: ${version}`,
|
|
);
|
|
return null; // Cannot parse version
|
|
}
|
|
|
|
return parseInt(match[0], 10);
|
|
} catch (error) {
|
|
console.error('Error reading or parsing Expo package.json:', error);
|
|
return null; // Error during processing
|
|
}
|
|
}
|
|
|
|
function checkAndCleanExpoConfig() {
|
|
const majorVersion = getExpoMajorVersion();
|
|
|
|
// Condition: Expo not found OR major version is less than 50
|
|
if (majorVersion === null || majorVersion < 50) {
|
|
if (fs.existsSync(expoConfigPath)) {
|
|
try {
|
|
fs.unlinkSync(expoConfigPath);
|
|
console.log(
|
|
`Expo version (${
|
|
majorVersion !== null ? majorVersion : 'not found'
|
|
}) is < 50 or Expo not found. Deleted ${expoConfigPath}`,
|
|
);
|
|
} catch (error) {
|
|
console.error(`Failed to delete ${expoConfigPath}:`, error);
|
|
}
|
|
} else {
|
|
console.log(
|
|
`Expo version (${
|
|
majorVersion !== null ? majorVersion : 'not found'
|
|
}) is < 50 or Expo not found. ${expoConfigPath} does not exist, no action needed.`,
|
|
);
|
|
}
|
|
} else {
|
|
console.log(
|
|
`Expo version (${majorVersion}) is >= 50. Kept ${expoConfigPath}`,
|
|
);
|
|
}
|
|
}
|
|
|
|
checkAndCleanExpoConfig();
|