Quellcode durchsuchen

fix(create): Fix package resolution in monorepos

Michael Bromley vor 3 Monaten
Ursprung
Commit
daf85f8341
2 geänderte Dateien mit 12 neuen und 10 gelöschten Zeilen
  1. 4 4
      packages/create/src/create-vendure-app.ts
  2. 8 6
      packages/create/src/helpers.ts

+ 4 - 4
packages/create/src/create-vendure-app.ts

@@ -307,15 +307,15 @@ export async function createVendureApp(
 
     // register ts-node so that the config file can be loaded
     // eslint-disable-next-line @typescript-eslint/no-var-requires
-    require(resolvePackageRootDir('ts-node')).register();
+    require(resolvePackageRootDir('ts-node', root)).register();
 
     let superAdminCredentials: { identifier: string; password: string } | undefined;
     try {
         const { populate } = await import(
-            path.join(resolvePackageRootDir('@vendure/core'), 'cli', 'populate')
+            path.join(resolvePackageRootDir('@vendure/core', root), 'cli', 'populate')
         );
         const { bootstrap, DefaultLogger, LogLevel, JobQueueService } = await import(
-            path.join(resolvePackageRootDir('@vendure/core'), 'dist', 'index')
+            path.join(resolvePackageRootDir('@vendure/core', root), 'dist', 'index')
         );
         const { config } = await import(configFile);
         const assetsDir = path.join(__dirname, '../assets');
@@ -508,7 +508,7 @@ async function createDirectoryStructure(root: string) {
  * Copy the email templates into the app
  */
 async function copyEmailTemplates(root: string) {
-    const emailPackageDirname = resolvePackageRootDir('@vendure/email-plugin');
+    const emailPackageDirname = resolvePackageRootDir('@vendure/email-plugin', root);
     const templateDir = path.join(emailPackageDirname, 'templates');
     try {
         await fs.copy(templateDir, path.join(root, 'static', 'email', 'templates'));

+ 8 - 6
packages/create/src/helpers.ts

@@ -313,9 +313,9 @@ async function checkPostgresDbExists(options: any, root: string): Promise<true>
         await client.connect();
 
         const schema = await client.query(
-            `SELECT schema_name FROM information_schema.schemata WHERE schema_name = '${
-                options.schema as string
-            }'`,
+            `SELECT schema_name
+             FROM information_schema.schemata
+             WHERE schema_name = '${options.schema as string}'`,
         );
         if (schema.rows.length === 0) {
             throw new Error('NO_SCHEMA');
@@ -533,17 +533,19 @@ export function cleanUpDockerResources(name: string) {
     }
 }
 
-export function resolvePackageRootDir(packageName: string) {
+export function resolvePackageRootDir(packageName: string, rootDir: string) {
     let packageEntryPath: string;
     try {
-        packageEntryPath = require.resolve(packageName);
+        packageEntryPath = require.resolve(packageName, { paths: [rootDir] });
     } catch {
         log(`Falling back to direct node_modules lookup for ${packageName}`);
         const fallbackPath = path.join(process.cwd(), 'node_modules', packageName);
         if (fs.existsSync(fallbackPath)) {
             return fallbackPath;
         }
-        throw new Error(`Cannot resolve package "${packageName}". Is it installed?`);
+        throw new Error(
+            `Cannot resolve package "${packageName}" (checked in ${fallbackPath}). Is it installed?`,
+        );
     }
 
     const target = packageName.split('/').pop();