Skip to content
This repository has been archived by the owner on Jun 8, 2021. It is now read-only.

adonis cli inside monorepo doesn't work #99

Closed
dimonnwc3 opened this issue Mar 22, 2018 · 2 comments
Closed

adonis cli inside monorepo doesn't work #99

dimonnwc3 opened this issue Mar 22, 2018 · 2 comments

Comments

@dimonnwc3
Copy link

I'm trying to use adonis inside monorepo with https://lernajs.io/ and yarn/yarn workspaces

my deps:

"@adonisjs/ace": "^5.0.1",
"@adonisjs/auth": "^3.0.4",
"@adonisjs/bodyparser": "^2.0.2",
"@adonisjs/cli": "^4.0.4",
"@adonisjs/cors": "^1.0.5",
"@adonisjs/fold": "^4.0.7",
"@adonisjs/framework": "^5.0.5",
"@adonisjs/ignitor": "^2.0.6",
"@adonisjs/lucid": "^5.0.3"

folder structure looks so:

.├── packages
│   └── api
│       ├── node_modules
│       ├── app
│       │   ├── Controllers
│       │   │   └── Http
│       │   │       └── HelloWorldController.js
│       │   └── Models
│       │       ├── Hooks
│       │       │   └── User.js
│       │       ├── Token.js
│       │       └── User.js
│       ├── config
│       │   ├── app.js
│       │   ├── auth.js
│       │   ├── bodyParser.js
│       │   ├── cors.js
│       │   └── database.js
│       ├── database
│       │   ├── migrations
│       │   │   ├── 1503250034279_user.js
│       │   │   └── 1503250034280_token.js
│       │   └── factory.js
│       ├── start
│       │   ├── app.js
│       │   ├── kernel.js
│       │   └── routes.js
│       ├── ace
│       ├── package.json
│       └── server.js
├── lerna.json
├── node_modules
├── package.json
└── yarn.lock

here is lerna config

{
  "lerna": "2.9.0",
  "packages": [
    "packages/*"
  ],
  "npmClient": "yarn",
  "useWorkspaces": true,
  "version": "0.0.0"
}

just try to execute adonis --help inside ./packages/api cwd
it throws an error:

Error: Cannot find module '/Users/user/project/packages/api/node_modules/@adonisjs
/ace'

1 Ignitor._registerCommands
  /Users/user/project/node_modules/@adonisjs/ignitor/src/Ignitor/index.js:411

2 Ignitor.fire
  /Users/user/project/node_modules/@adonisjs/ignitor/src/Ignitor/index.js:754

so there is two node_modules folders

  1. in project root
  2. in package/api folder

as I see cli util tries to resolve node_modules inside packages/api folder, but lerna/yarn workspaces use hoisting (https://github.com/lerna/lerna/#--hoist-glob) for modules and creates symlinks only for .bin

as a short solution, to make it work, I just use postinstall hook and create an symlink manually: cd packages/api/node_modules && ln -s ../../../node_modules/@adonisjs

@RomainLanz
Copy link
Member

Hey @dimonnwc3! 👋

Happy to accept a PR if you find a way that doesn't break people that aren't using lerna/yarn.

@dimonnwc3
Copy link
Author

fortunately I've just found a nice solution introduced a month ago
https://yarnpkg.com/blog/2018/02/15/nohoist/

by adding this to package.json:

"workspaces": {
    "packages": ["packages/*"],
    "nohoist": ["**/@adonisjs", "**/@adonisjs/**"]
  },

hoisting could be disabled for particular modules

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants