From 4d45ae00545079343f81f1c7312b4475b57c79dd Mon Sep 17 00:00:00 2001 From: Frank Calise Date: Wed, 6 Dec 2023 09:33:42 -0500 Subject: [PATCH] feat(cli): remove unused deps upon demo removal (#2572 by @frankcalise) --- src/commands/new.ts | 7 +++++++ src/tools/demo.ts | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/commands/new.ts b/src/commands/new.ts index 2fcd1d73d..c0db3c392 100644 --- a/src/commands/new.ts +++ b/src/commands/new.ts @@ -30,6 +30,7 @@ import { expoGoCompatExpectedVersions, findAndUpdateDependencyVersions, } from "../tools/expoGoCompatibility" +import { demoDependenciesToRemove, findAndRemoveDemoDependencies } from "../tools/demo" type Workflow = "expo" | "prebuild" | "manual" @@ -566,6 +567,12 @@ module.exports = { ) } + // - If we're removing the demo code, clean up some dependencies that are no longer needed + if (removeDemo) { + log(`Removing demo dependencies... ${demoDependenciesToRemove.join(", ")}`) + packageJsonRaw = findAndRemoveDemoDependencies(packageJsonRaw) + } + // - Then write it back out. const packageJson = JSON.parse(packageJsonRaw) diff --git a/src/tools/demo.ts b/src/tools/demo.ts index 7cf25c1c8..55d33ab4d 100644 --- a/src/tools/demo.ts +++ b/src/tools/demo.ts @@ -208,3 +208,22 @@ export const demo = { find, update, } as const + +export const demoDependenciesToRemove = [ + "@react-navigation/bottom-tabs", + "expo-application", + "react-native-drawer-layout", +] + +// This function takes a package.json file as a string and removes the dependencies +// specified in demoDependenciesToRemove and returns the updated package.json as a string. +export function findAndRemoveDemoDependencies(packageJsonRaw: string): string { + let updatedPackageJson = packageJsonRaw + + demoDependenciesToRemove.forEach((depName) => { + const regex = new RegExp(`"${depName}"\\s*:\\s*"[^"]+",?`, "g") + updatedPackageJson = updatedPackageJson.replace(regex, "") + }) + + return updatedPackageJson +}