diff --git a/.changeset/eight-wasps-juggle.md b/.changeset/eight-wasps-juggle.md new file mode 100644 index 0000000000..304841ff84 --- /dev/null +++ b/.changeset/eight-wasps-juggle.md @@ -0,0 +1,5 @@ +--- +"medusa-dev-cli": patch +--- + +fix(medusa-dev): include packages/ subdirectories in discovery diff --git a/packages/medusa-dev-cli/package.json b/packages/medusa-dev-cli/package.json index 8866a1fec7..6b243ec7bf 100644 --- a/packages/medusa-dev-cli/package.json +++ b/packages/medusa-dev-cli/package.json @@ -17,6 +17,7 @@ "execa": "^4.1.0", "find-yarn-workspace-root": "^2.0.0", "fs-extra": "^9.0.1", + "glob": "^8.1.0", "got": "^11.8.6", "is-absolute": "^1.0.0", "jest": "^25.5.4", diff --git a/packages/medusa-dev-cli/src/index.js b/packages/medusa-dev-cli/src/index.js index df092bb6e6..acc33f0aa7 100644 --- a/packages/medusa-dev-cli/src/index.js +++ b/packages/medusa-dev-cli/src/index.js @@ -7,6 +7,7 @@ const yargs = require(`yargs/yargs`) const path = require(`path`) const os = require(`os`) const fs = require(`fs-extra`) +const glob = require("glob") const watch = require(`./watch`) const { getVersionInfo } = require(`./utils/version`) const { buildFFCli } = require("./feature-flags") @@ -94,35 +95,50 @@ medusa-dev --set-path-to-repo /path/to/my/cloned/version/medusa process.exit() } + // get list of directories to crawl for package declarations + const monoRepoPackagesDirs = [] + try { + const monoRepoPkg = JSON.parse( + fs.readFileSync(path.join(medusaLocation, "package.json")) + ) + for (const workspace of monoRepoPkg.workspaces.packages) { + if (!workspace.startsWith("packages")) { + continue + } + const workspacePackageDirs = glob.sync(workspace, { + cwd: medusaLocation.toString(), + }) + monoRepoPackagesDirs.push(...workspacePackageDirs) + } + } catch (err) { + console.error( + `Unable to read and parse the workspace definition from medusa package.json` + ) + process.exit(1) + } + // get list of packages from monorepo const packageNameToPath = new Map() - const monoRepoPackages = fs - .readdirSync(path.join(medusaLocation, `packages`)) - .map((dirName) => { - try { - const localPkg = JSON.parse( - fs.readFileSync( - path.join(medusaLocation, `packages`, dirName, `package.json`) - ) - ) - - if (localPkg?.name) { - packageNameToPath.set( - localPkg.name, - path.join(medusaLocation, `packages`, dirName) - ) - return localPkg.name - } - } catch (error) { - // fallback to generic one - } - - packageNameToPath.set( - dirName, - path.join(medusaLocation, `packages`, dirName) + const monoRepoPackages = monoRepoPackagesDirs.map((dirName) => { + try { + const localPkg = JSON.parse( + fs.readFileSync(path.join(medusaLocation, dirName, `package.json`)) ) - return dirName - }) + + if (localPkg?.name) { + packageNameToPath.set( + localPkg.name, + path.join(medusaLocation, dirName) + ) + return localPkg.name + } + } catch (error) { + // fallback to generic one + } + + packageNameToPath.set(dirName, path.join(medusaLocation, dirName)) + return dirName + }) const localPkg = JSON.parse(fs.readFileSync(`package.json`)) // intersect dependencies with monoRepoPackages to get list of packages that are used diff --git a/packages/medusa-dev-cli/src/local-npm-registry/install-packages.js b/packages/medusa-dev-cli/src/local-npm-registry/install-packages.js index ba98996b29..e9356e2ddf 100644 --- a/packages/medusa-dev-cli/src/local-npm-registry/install-packages.js +++ b/packages/medusa-dev-cli/src/local-npm-registry/install-packages.js @@ -24,9 +24,16 @@ const installPackages = async ({ // in workspaces which should preserve node_modules structure // (packages being mostly hoisted to top-level node_modules) + const { stdout: yarnVersion } = await promisifiedSpawn([ + `yarn`, + [`--version`], + { stdio: `pipe` }, + ]) + const workspaceCommand = !yarnVersion.startsWith("1") ? "list" : "info" + const { stdout } = await promisifiedSpawn([ `yarn`, - [`workspaces`, `info`, `--json`], + [`workspaces`, workspaceCommand, `--json`], { stdio: `pipe` }, ]) diff --git a/yarn.lock b/yarn.lock index 89011e611e..251b81d552 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19150,7 +19150,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^8.0.3": +"glob@npm:^8.0.3, glob@npm:^8.1.0": version: 8.1.0 resolution: "glob@npm:8.1.0" dependencies: @@ -25415,6 +25415,7 @@ __metadata: execa: ^4.1.0 find-yarn-workspace-root: ^2.0.0 fs-extra: ^9.0.1 + glob: ^8.1.0 got: ^11.8.6 is-absolute: ^1.0.0 jest: ^25.5.4