1#!/usr/bin/env node 2 3const fs = require('fs'); 4const path = require('path'); 5 6function removePackages(expoDirectory, projectDirectory, packagesToRemove) { 7 const pkgJson = require(path.resolve(projectDirectory, './package.json')); 8 const symlinks = pkgJson.expo.symlinks; 9 const nextSymlinks = []; 10 11 symlinks.forEach((packageName) => { 12 if (!packagesToRemove.includes(packageName)) { 13 nextSymlinks.push(packageName); 14 } else { 15 delete pkgJson.dependencies[packageName]; 16 17 const nodeModulesPackage = path.resolve(projectDirectory, 'node_modules', packageName); 18 19 fs.rmSync(nodeModulesPackage, { recursive: true }); 20 } 21 }); 22 23 nextSymlinks.forEach((packageName) => { 24 const pathToPackage = path.resolve(expoDirectory, 'packages', packageName); 25 26 const nodeModulesPackage = path.resolve(projectDirectory, 'node_modules', packageName); 27 28 const pkg = require(path.resolve(pathToPackage, 'package.json')); 29 const version = pkg.version || '*'; 30 31 pkgJson.dependencies[packageName] = version; 32 33 if (fs.existsSync(nodeModulesPackage)) { 34 fs.rmSync(nodeModulesPackage, { recursive: true }); 35 } 36 37 fs.symlinkSync(pathToPackage, nodeModulesPackage); 38 }); 39 40 pkgJson.expo.symlinks = nextSymlinks; 41 42 fs.writeFileSync( 43 path.resolve(projectDirectory, './package.json'), 44 JSON.stringify(pkgJson, null, 2), 45 { encoding: 'utf-8' } 46 ); 47 48 console.log('Removing packages complete'); 49} 50 51const [expoDirectory, projectDirectory, ...packageNames] = process.argv.slice(2); 52removePackages(expoDirectory, projectDirectory, packageNames); 53