Search code examples
node.jsyarnpkglerna

lerna import always returns EDESTDIR


I have a pre-existing project that I'd like to import into my existing lerna monorepo that uses yarn workspaces.

Command(s):

I've tried running all of the following commands. The error remains stubbornly unchanged. Also, petstore has a package.json file and is a git repo.

lerna import ./petstore --dest="./packages/"
lerna import ./petstore --dest="./packages/api/"

ERROR:

lerna notice cli v3.20.2
lerna ERR! EDESTDIR --dest does not match with the package directories: packages/**

Also, lerna import ../petstore results in a packages/**/petstore being created which is not an expected result.

I hope this consists of all the relevant code. We have supporting packages under packages/shared and apis under packages/api.

lerna.json

{
  "packages": [
    "packages/**/*"
  ],
  "npmClient": "yarn",
  "useWorkspaces": true,
  "private": true,
  "version": "0.0.1",
  "lerna": "2.11.0"
}

package.json

{
  "name": "root",
  "devDependencies": {
    "lerna": "^2.11.0"
  },
  "workspaces": [
    "packages/**/*"
  ],
}

Resources I have looked at:


Solution

  • Lerna reads the packages from the key workspaces on package.json instead of the packages on lerna.json.

    lerna reads all the values with a /* and considers them package directories. It interprets ** literally and does not parse it as a wildcard and expand it.

    The solution is to remove packages from lerna.json:

    {
      "npmClient": "yarn",
      "useWorkspaces": true,
      "private": true,
      "version": "0.0.1",
      "lerna": "2.11.0"
    }
    

    and update the workspaces path to refer to any sub-directories in your packages explicitly if your monorepo is structured that way:

    {
      "name": "root",
      "devDependencies": {
        "lerna": "^2.11.0"
      },
      "workspaces": [
        "packages/a/*",
        "packages/api/*"
      ],
    }
    

    To import the pet-store project into packages/api in the monorepo from a directory outside the mono-repo:

    lerna import ../pet-store --dest="./packages/api/"