Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Building and running extensions is broken #11275

Closed
3 tasks done
HitomiTenshi opened this issue Jan 25, 2022 · 15 comments · Fixed by #11329
Closed
3 tasks done

Building and running extensions is broken #11275

HitomiTenshi opened this issue Jan 25, 2022 · 15 comments · Fixed by #11329

Comments

@HitomiTenshi
Copy link
Contributor

Preflight Checklist

Describe the Bug

Extensions do not work anymore since @directus/extensions-sdk 9.5.0.

To Reproduce

  • npm init directus-extension my-extension
  • choose endpoint
  • name as my-extension
  • choose typescript
  • cd my-extension
  • npm run build

Errors Shown

> directus-extension build

⠴ Building Directus extension...Circular dependency: node_modules\joi\lib\index.js -> node_modules\joi\lib\cache.js -> node_modules\joi\lib\common.js -> node_modules\joi\lib\schemas.js -> node_modules\joi\lib\index.js
Circular dependency: node_modules\joi\lib\index.js -> node_modules\joi\lib\cache.js -> node_modules\joi\lib\common.js -> node_modules\joi\lib\schemas.js -> C:\Users\fegit1\Documents\Apps\asd\node_modules\joi\lib\index.js?commonjs-proxy -> node_modules\joi\lib\index.js
Circular dependency: node_modules\joi\lib\common.js -> node_modules\joi\lib\messages.js -> node_modules\joi\lib\template.js -> node_modules\joi\lib\common.js
Circular dependency: node_modules\joi\lib\common.js -> node_modules\joi\lib\messages.js -> node_modules\joi\lib\template.js -> C:\Users\fegit1\Documents\Apps\asd\node_modules\joi\lib\common.js?commonjs-proxy -> node_modules\joi\lib\common.js
Circular dependency: node_modules\joi\lib\common.js -> node_modules\joi\lib\messages.js -> node_modules\joi\lib\template.js -> node_modules\joi\lib\errors.js -> node_modules\joi\lib\annotate.js -> node_modules\joi\lib\common.js
Circular dependency: node_modules\joi\lib\common.js -> node_modules\joi\lib\messages.js -> node_modules\joi\lib\template.js -> node_modules\joi\lib\errors.js -> node_modules\joi\lib\common.js
Circular dependency: node_modules\joi\lib\template.js -> node_modules\joi\lib\errors.js -> node_modules\joi\lib\template.js
Circular dependency: node_modules\joi\lib\template.js -> node_modules\joi\lib\errors.js -> C:\Users\fegit1\Documents\Apps\asd\node_modules\joi\lib\template.js?commonjs-proxy -> node_modules\joi\lib\template.js
Circular dependency: node_modules\joi\lib\common.js -> node_modules\joi\lib\messages.js -> node_modules\joi\lib\template.js -> node_modules\joi\lib\ref.js -> node_modules\joi\lib\common.js
Circular dependency: node_modules\joi\lib\template.js -> node_modules\joi\lib\ref.js -> node_modules\joi\lib\template.js
Circular dependency: node_modules\axios\lib\defaults.js -> node_modules\axios\lib\adapters\xhr.js -> node_modules\axios\lib\defaults.js
Circular dependency: node_modules\axios\lib\defaults.js -> node_modules\axios\lib\adapters\xhr.js -> C:\Users\fegit1\Documents\Apps\asd\node_modules\axios\lib\defaults.js?commonjs-proxy -> node_modules\axios\lib\defaults.js
Circular dependency: node_modules\axios\lib\defaults.js -> node_modules\axios\lib\adapters\http.js -> node_modules\axios\lib\defaults.js
✔ Done

When trying to load the resulting index.js in directus, this is what gets logged:

⚠️  Couldn't register endpoint "my-extension"
⚠️  Cannot read properties of undefined (reading 'string')
✨ Loaded extensions: my-extension
✨ Server started at http://localhost:8055

What version of Directus are you using?

9.5.0

What version of Node.js are you using?

16.13.2

What database are you using?

MariaDB 10.3.32

What browser are you using?

N/A

What operating system are you using?

Windows 10

How are you deploying Directus?

Ubuntu Server 20.04, npm installation with a systemd service running it

@rijkvanzanten
Copy link
Member

@nickrum I'm assuming it's caused by #11100, but haven't confirmed

@Attacler
Copy link

Same issue here, is there any way around it?

@Dominic-Marcelino
Copy link
Contributor

Same issue here, is there any way around it?

You can downgrade to "@directus/extensions-sdk": "9.4.0" until it's fixed

@Attacler
Copy link

@nickrum I'm assuming it's caused by #11100, but haven't confirmed

I dont think its that change, if i place false in there instead of true, it is not fixed.

nickrum added a commit that referenced this issue Jan 28, 2022
Since #11099 the extensions-sdk isn't externalized anymore when bundling API extensions.
This causes rollup to pull in a lot of unnecessary dependencies that aren't automatically tree-shaken.

Fixes #11275
nickrum added a commit that referenced this issue Feb 2, 2022
Since #11099 the extensions-sdk isn't externalized anymore when bundling API extensions.
This causes rollup to pull in a lot of unnecessary dependencies that aren't automatically tree-shaken.

Fixes #11275
@HitomiTenshi
Copy link
Contributor Author

Using @directus/extensions-sdk v9.5.1 still results in the same errors:

> directus-extension build

⠙ Building Directus extension...Circular dependency: node_modules\joi\lib\index.js -> node_modules\joi\lib\cache.js -> node_modules\joi\lib\common.js -> node_modules\joi\lib\schemas.js -> node_modules\joi\lib\index.js
Circular dependency: node_modules\joi\lib\index.js -> node_modules\joi\lib\cache.js -> node_modules\joi\lib\common.js -> node_modules\joi\lib\schemas.js -> C:\Users\fegit1\Documents\Apps\product-stock\node_modules\joi\lib\index.js?commonjs-proxy -> node_modules\joi\lib\index.js
Circular dependency: node_modules\joi\lib\common.js -> node_modules\joi\lib\messages.js -> node_modules\joi\lib\template.js -> node_modules\joi\lib\common.js
Circular dependency: node_modules\joi\lib\common.js -> node_modules\joi\lib\messages.js -> node_modules\joi\lib\template.js -> C:\Users\fegit1\Documents\Apps\product-stock\node_modules\joi\lib\common.js?commonjs-proxy -> node_modules\joi\lib\common.js
Circular dependency: node_modules\joi\lib\common.js -> node_modules\joi\lib\messages.js -> node_modules\joi\lib\template.js -> node_modules\joi\lib\errors.js -> node_modules\joi\lib\annotate.js -> node_modules\joi\lib\common.js
Circular dependency: node_modules\joi\lib\common.js -> node_modules\joi\lib\messages.js -> node_modules\joi\lib\template.js -> node_modules\joi\lib\errors.js -> node_modules\joi\lib\common.js
Circular dependency: node_modules\joi\lib\template.js -> node_modules\joi\lib\errors.js -> node_modules\joi\lib\template.js
Circular dependency: node_modules\joi\lib\template.js -> node_modules\joi\lib\errors.js -> C:\Users\fegit1\Documents\Apps\product-stock\node_modules\joi\lib\template.js?commonjs-proxy -> node_modules\joi\lib\template.js
Circular dependency: node_modules\joi\lib\common.js -> node_modules\joi\lib\messages.js -> node_modules\joi\lib\template.js -> node_modules\joi\lib\ref.js -> node_modules\joi\lib\common.js
Circular dependency: node_modules\joi\lib\template.js -> node_modules\joi\lib\ref.js -> node_modules\joi\lib\template.js
Circular dependency: node_modules\axios\lib\defaults.js -> node_modules\axios\lib\adapters\xhr.js -> node_modules\axios\lib\defaults.js
Circular dependency: node_modules\axios\lib\defaults.js -> node_modules\axios\lib\adapters\xhr.js -> C:\Users\fegit1\Documents\Apps\product-stock\node_modules\axios\lib\defaults.js?commonjs-proxy -> node_modules\axios\lib\defaults.js
Circular dependency: node_modules\axios\lib\defaults.js -> node_modules\axios\lib\adapters\http.js -> node_modules\axios\lib\defaults.js
✔ Done

I have created a fresh new endpoint using the reproduction steps. I even ran npm update and made sure there are no newer dependencies available.

@ctholho
Copy link

ctholho commented Feb 5, 2022

I can also reproduce the same error. Downgrading @directus/extensions-sdk to 9.4.0 does help, though.

@ybelenko
Copy link

ybelenko commented Feb 5, 2022

I can also reproduce the same error. Downgrading @directus/extensions-sdk to 9.4.0 does help, though.

Doesn't help for me, still warnings of circular dependency Joi package and same errors on Directus build.

@HitomiTenshi
Copy link
Contributor Author

@ybelenko I'm using @directus/extensions-sdk 9.4.3 and it's working for met too, @ctholho is right. Make sure you remove any ^ sign before the dependency version and run npm install after that.

Before: "@directus/extensions-sdk": "^9.5.1"
After: "@directus/extensions-sdk": "9.4.3" Notice no ^ sign. Now run npm install.

Also make sure to do the same for the "host" property above (just in case):

  "directus:extension": {
    "type": "endpoint",
    "path": "dist/index.js",
    "source": "src/index.ts",
    "host": "9.4.3"
  }

@nickrum
Copy link
Member

nickrum commented Feb 5, 2022

Those "Circular dependency" messages are just warnings that shouldn't affect the extension in any way (though we should probably silence them to reduce confusion).
Could you check if Directus properly loads the extension even though the warning message is present?

@ybelenko
Copy link

ybelenko commented Feb 5, 2022

Build process with 9.4.3(even console states that):

node_modules/.bin/directus-extension -v && node_modules/.bin/directus-extension build
9.4.3
⠹ Building Directus extension...Circular dependency: node_modules/joi/lib/index.js -> node_modules/joi/lib/cache.js -> node_modules/joi/lib/common.js -> node_modules/joi/lib/schemas.js -> node_modules/joi/lib/index.js
Circular dependency: node_modules/joi/lib/index.js -> node_modules/joi/lib/cache.js -> node_modules/joi/lib/common.js -> node_modules/joi/lib/schemas.js -> /Users/ybelenko/Sites/bdo-feedback/node_modules/joi/lib/index.js?commonjs-proxy -> node_modules/joi/lib/index.js
Circular dependency: node_modules/joi/lib/common.js -> node_modules/joi/lib/messages.js -> node_modules/joi/lib/template.js -> node_modules/joi/lib/common.js
Circular dependency: node_modules/joi/lib/common.js -> node_modules/joi/lib/messages.js -> node_modules/joi/lib/template.js -> /Users/ybelenko/Sites/bdo-feedback/node_modules/joi/lib/common.js?commonjs-proxy -> node_modules/joi/lib/common.js
Circular dependency: node_modules/joi/lib/common.js -> node_modules/joi/lib/messages.js -> node_modules/joi/lib/template.js -> node_modules/joi/lib/errors.js -> node_modules/joi/lib/annotate.js -> node_modules/joi/lib/common.js
Circular dependency: node_modules/joi/lib/common.js -> node_modules/joi/lib/messages.js -> node_modules/joi/lib/template.js -> node_modules/joi/lib/errors.js -> node_modules/joi/lib/common.js
Circular dependency: node_modules/joi/lib/template.js -> node_modules/joi/lib/errors.js -> node_modules/joi/lib/template.js
Circular dependency: node_modules/joi/lib/template.js -> node_modules/joi/lib/errors.js -> /Users/ybelenko/Sites/bdo-feedback/node_modules/joi/lib/template.js?commonjs-proxy -> node_modules/joi/lib/template.js
Circular dependency: node_modules/joi/lib/common.js -> node_modules/joi/lib/messages.js -> node_modules/joi/lib/template.js -> node_modules/joi/lib/ref.js -> node_modules/joi/lib/common.js
Circular dependency: node_modules/joi/lib/template.js -> node_modules/joi/lib/ref.js -> node_modules/joi/lib/template.js
✔ Done

package.json:

{
    "name": "directus-extension-bdo-feedback",
    "version": "1.0.0",
    "keywords": [
        "directus",
        "directus-extension",
        "directus-custom-hook"
    ],
    "directus:extension": {
        "type": "hook",
        "path": "dist/index.js",
        "source": "src/index.js",
        "host": "9.4.3"
    },
    "scripts": {
        "build": "directus-extension build"
    },
    "devDependencies": {
        "@directus/extensions-sdk": "9.4.3"
    },
    "dependencies": {
        "joi": "^17.4.2",
        "libphonenumber-js": "^1.9.47"
    }
}

Directus startup:

npm run dev -- --scope directus --scope @directus/app
> dev
> lerna run dev --stream --parallel "--scope" "directus" "--scope" "@directus/app"

lerna notice cli v4.0.0
lerna notice filter including ["directus","@directus/app"]
lerna info filter [ 'directus', '@directus/app' ]
lerna info Executing command in 2 packages: "npm run dev"
@directus/app: > @directus/app@9.5.1 dev
@directus/app: > vite
directus: > directus@9.5.1 dev
directus: > cross-env NODE_ENV=development SERVE_APP=false ts-node-dev --files --transpile-only --respawn --watch ".env" --inspect=0 --exit-child -- src/start.ts
directus: [INFO] 20:40:33 ts-node-dev ver. 1.1.8 (using ts-node ver. 9.1.1, typescript ver. 4.5.2)
directus: Debugger listening on ws://127.0.0.1:49845/40ccd0d9-da49-4db4-9cd2-264d2db476a6
directus: For help, see: https://nodejs.org/en/docs/inspector
@directus/app:   vite v2.6.14 dev server running at:
@directus/app:   > Local: http://localhost:8080/admin/
@directus/app:   > Network: use `--host` to expose
@directus/app:   ready in 2007ms.
directus: 20:40:51 ⚠️  Couldn't register hook "bdo-feedback"
directus: 20:40:51 ⚠️  Cannot read properties of undefined (reading 'string')
directus: 20:40:51 ✨ Loaded extensions: bdo-feedback
directus: 20:40:51 ✨ Server started at http://localhost:8055

@HitomiTenshi Do you import joi package in your extension?
@nickrum It says:

directus: 20:40:51 ⚠️ Couldn't register hook "bdo-feedback"
directus: 20:40:51 ⚠️ Cannot read properties of undefined (reading 'string')

then extension hook conpletely skipped by the app.

@HitomiTenshi
Copy link
Contributor Author

Could you check if Directus properly loads the extension even though the warning message is present?

@nickrum I checked and the extension loads properly and works even with the warnings. Okay false alarm, it's fixed! Thanks! Although it would be nice if the warnings are hidden 👍

@ybelenko I'm not importing joi. I'm only importing the things, that the npm init directus-extension command set up. You can use the latest version and ignore circular dependency warnings that come up, the extension loads fine with sdk version 9.5.1.

@ybelenko
Copy link

ybelenko commented Feb 5, 2022

Well, now I'm confident that it's because I use joi import:

import Joi from 'joi';

export default ({ filter }, { services, exceptions }) => {

};

gives:

directus: 23:16:25 ⚠️  Couldn't register hook "bdo-feedback"
directus: 23:16:25 ⚠️  Cannot read properties of undefined (reading 'string')
// import Joi from 'joi';

export default ({ filter }, { services, exceptions }) => {

};

correct output:

directus: 23:17:04 ✨ Loaded extensions: bdo-feedback

@workatease
Copy link
Contributor

Well, now I'm confident that it's because I use joi import:

import Joi from 'joi';

export default ({ filter }, { services, exceptions }) => {

};

gives:

directus: 23:16:25 ⚠️  Couldn't register hook "bdo-feedback"
directus: 23:16:25 ⚠️  Cannot read properties of undefined (reading 'string')
// import Joi from 'joi';

export default ({ filter }, { services, exceptions }) => {

};

correct output:

directus: 23:17:04 ✨ Loaded extensions: bdo-feedback

Instead of import try require it works.. not sure what is the issue here

@ybelenko
Copy link

ybelenko commented Feb 8, 2022

Instead of import try require it works.. not sure what is the issue here

No warnings about circular dependencies now, but it doesn't actually pack deps into extension build. Joi works since it already included in Directus, but I have another error with libphonenumber-js package:

directus: 13:34:35 ⚠️  Couldn't register hook "bdo-feedback"
directus: 13:34:35 ⚠️  Cannot find module 'libphonenumber-js'

Of course I can create a fork of Directus and add missed packages to package.json myself, but it breaks the whole purpose of extension.

@ybelenko
Copy link

ybelenko commented Feb 8, 2022

Maybe I should use my own builder when I need to use additional NPM packages? Build with Webpack or something instead of directus-extension build?

UPD: as temp workaround I use commonJs(const joi = require('joi');) syntax when I need to use any external package in the extension, that way rollup plugin doesn't pack dependency into final extension bundle. The drawback of this way is that I have to manually install these deps into Directus project like:

npm i --save joi

so package.json of the Directus instance:

{
  "name": "my-project",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "start": "directus start"
  },
  "dependencies": {
---    "directus": "^9.5.2"
+++    "directus": "^9.5.2",
+++    "joi": "^17.6.0"
  }
}

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Feb 2, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

8 participants