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

SvelteKit build fails on dayjs ES module import not supported #9

Closed
kbsali opened this issue Dec 2, 2021 · 18 comments
Closed

SvelteKit build fails on dayjs ES module import not supported #9

kbsali opened this issue Dec 2, 2021 · 18 comments

Comments

@kbsali
Copy link

kbsali commented Dec 2, 2021

Hi,

Thanks for this cool lib/component. It works great in dev mode for a Sveltekit project I am developping, but when running npm run build it fails with the following error :

Error [ERR_UNSUPPORTED_DIR_IMPORT]: Directory import '/home/.../node_modules/dayjs/esm' is not supported resolving ES modules imported from /home/.../.svelte-kit/output/server/chunks/index-5e596d58.js
Did you mean to import dayjs/esm/index.js?
    at new NodeError (internal/errors.js:322:7)
    at finalizeResolution (internal/modules/esm/resolve.js:304:17)
    at moduleResolve (internal/modules/esm/resolve.js:731:10)
    at Loader.defaultResolve [as _resolve] (internal/modules/esm/resolve.js:842:11)
    at Loader.resolve (internal/modules/esm/loader.js:89:40)
    at Loader.getModuleJob (internal/modules/esm/loader.js:242:28)
    at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:76:40)
    at link (internal/modules/esm/module_job.js:75:36)

Any idea how this could be fixed? 🙏

@metonym
Copy link
Owner

metonym commented Dec 2, 2021

@kbsali Thank you for raising this issue.

What SvelteKit version are you using? What adapter?

The SvelteKit example uses the latest SvelteKit version with the Node adapter and is able to build successfully.

@kbsali
Copy link
Author

kbsali commented Dec 2, 2021

$ npm list| grep svelte
├── @sveltejs/adapter-vercel@1.0.0-next.31
├── @sveltejs/kit@1.0.0-next.201
...
├── svelte@3.44.2

So it's with the Vercel adapter. In the end I only started using your component and so it was not too long to implement my own component based on Intl.DateTimeFormat and Intl.RelativeTimeFormat, making the build work fine. I'd still be interested in getting svelte-time to work, but apparently dayjs' maintainer is not really reactive at updating his lib :/

@metonym
Copy link
Owner

metonym commented Dec 2, 2021

@kbsali Thank you for the details.

I swapped the Node adapter for the Vercel adapter and it still built successfully.

However, I was able to repro the error by installing dayjs as a devDependency. I believe the solution is to not explicitly install dayjs as its own dependency.

Related: #3 (comment)

@imbolc
Copy link
Contributor

imbolc commented May 15, 2022

There's still an issue with Vite (essentially a restart of the dev-server required for every change), which dayjs v2 should fix, but they're in alpha and haven't ported relativeTime plugin yet.

@metonym
Copy link
Owner

metonym commented May 15, 2022

@imbolc Thanks for the info. I'm now encountering a different issue in dev for SvelteKit, and a build error when using Snowpack. I didn't encounter this when linking it locally.

I think I'll have to revert #13.

@metonym
Copy link
Owner

metonym commented May 15, 2022

It looks like dayjs v2 is still a work in progress; although it's written in ESM, it does not have the relativeTime plugin.

An alternative would be to fork dayjs and make it compatible.

@imbolc
Copy link
Contributor

imbolc commented May 15, 2022

If everything else except of relativeTime works with dayjs-v2 we could create a next branch depending on it. With regard to relativeTime we could help them to port the plugin or remove relative prop and wait until they port the plugin themselves.

@metonym metonym pinned this issue May 15, 2022
@haysquareA
Copy link

haysquareA commented May 26, 2022

And today, I'm also facing the same issue using VITE
I'm using static adapter because I'm using it with capacitorJS for mobile development

@alexmccartneymoore
Copy link

I'm also facing the same issue trying with a 'yup' module, using the node adapter.

@WebShapedBiz
Copy link

Same issue here, Netlify build failure with error Error [ERR_UNSUPPORTED_DIR_IMPORT]: Directory import '/opt/build/repo/node_modules/dayjs/esm' is not supported resolving ES modules imported from /opt/build/repo/.svelte-kit/output/server/entries/pages/obavijesti.svelte.js 9:35:57 AM: Did you mean to import dayjs/esm/index.js?

@metonym
Copy link
Owner

metonym commented Jun 19, 2022

Update: I published v0.7.1 which switches the dayjs imports back to CJS from ESM.

This should unblock usage of this library with SvelteKit.

The current downside is that it doesn't work with Snowpack, which I've recorded as a known issue. However, I feel that it's better to unblock SvelteKit than Snowpack since SvelteKit/vite has ~30x the usage of Snowpack (based on average NPM downloads).

@WebShapedBiz
Copy link

Thank you very much @metonym for your time and effort.

@kbsali
Copy link
Author

kbsali commented Jun 20, 2022

thanks @metonym !
To be honest I am not using this component anymore, so I'm not sure what to do with this issue! :) Should I close it, from what I can read I looks like it is fixed now, right?

@metonym metonym closed this as completed Jun 20, 2022
@metonym metonym unpinned this issue Jun 22, 2022
@Giszmo
Copy link

Giszmo commented Aug 22, 2022

I just tried out this plugin using the instructions here on this repo:

npm i -D svelte-time

<script>
  import Time from "svelte-time";
</script>

<Time />

and get an import not found: default.

Might this be related to the use of typescript or did I run into the issue here?

@metonym
Copy link
Owner

metonym commented Aug 22, 2022

@Giszmo What set-up are you using?

@Giszmo
Copy link

Giszmo commented Aug 22, 2022

node v18.6.0
typescript ^4.7.4

... what part of set-up do you mean? It was for https://github.com/Giszmo/nostroid

@metonym
Copy link
Owner

metonym commented Aug 22, 2022

what part of set-up do you mean?

By set-up, I'm referring to SvelteKit/Vite/Rollup etc.

It looks like you're using SvelteKit. From a glance, it looks correct. Are you able to run the SvelteKit example locally?

@Giszmo
Copy link

Giszmo commented Aug 23, 2022

Everything works totally fine until I try to add svelte-time. The import runs into issues.

If you want me to debug something, I'm around but else, I wrote my own widget that's good enough for now.

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

No branches or pull requests

7 participants