Open varugasu opened 2 weeks ago
Vitest cannot process ES modules that were imported using require
because ES module transformation is asynchronous.
To bypass that, you can enable the optimizer:
export default defineConfig({
test: {
deps: {
web: {
enabled: true,
include: ['lib'],
},
},
},
})
Hey @sheremet-va , thank you for responding. I tried applying it and it also didn't work
esm-only
is packaged as ESM but with.js
extension and I can't control how this library bundled
@varugasu Assuming your esm-only
is only for the purpose of repro, what is the actual npm package you use?
Also what is the reason you have node
condition which directs to cjs? How about doing it like this?
"exports": {
".": {
"require": "./dist/index.cjs",
"import": "./dist/index.mjs",
"types": "./dist/index.d.ts"
},
"./*": {
"require": "./dist/*/index.cjs",
"import": "./dist/*/index.mjs",
"types": "./dist/*/index.d.ts"
}
},
@hi-ogawa , the actual package is an internal one, so I can't share it.
About your suggestion, it indeed solves my reproduction, but testing on my actual project, I have the following error:
Error: Directory import '.../node_modules/@mui/material/CircularProgress' is not supported resolving ES modules imported from .../node_modules/...index.mjs
Did you mean to import @mui/material/node/CircularProgress/index.js?
(I redacted the sensitive information with ...
)
I added node
because I was having this issue:
SyntaxError: Unexpected token 'export'
Module .../index.js:1 seems to be an ES Module but shipped in a CommonJS package. You might want to create an issue to the package "internal-lib-esm-only" asking them to ship the file in .mjs extension or add "type": "module" in their package.json.
As a temporary workaround you can try to inline the package by updating your config:
// vitest.config.js
export default {
test: {
server: {
deps: {
inline: [
"internal-lib-esm-only"
]
}
}
}
}
From what I can tell, both esm-only
and @mui/material
errors are due to the wrong usage and technically they should be fixed to follow a node module resolution even though many bundlers might tolerate this.
That said, the error from @mui/material
import in your library is usually worked around by server.deps.inline
. It would be nice to have a reproduction that to understand the issue though.
Describe the bug
I was creating a library with
unbuild
usingrollup
and generatingdist/*.cjs
anddist/*.mjs
files. As I didn't want to import directly fromlib/dist
, I created the followingpackage.json
:This
lib
depends on another lib,esm-only
.esm-only
is packaged as ESM but with.js
extension and I can't control how this library bundledMy App project uses
lib
. When I ran vitest on my App project, I got this error:The only thing I was able to make it work was to change
lib/package.json
to:And then change
src/lib.test.ts
to:But as you can see, I have
lib/dist/utils
, I want to be able to importlib/utils
instead.Another option is to change
lib/build.config.ts
to usemkdist
:And my
lib/package.json
to:Finally, this ONLY DOESN'T work on Vitest. On Vite I can normally run both in dev and production mode.
Related issues:
server.deps.inline
but it didn't workReproduction
I created this repository to reproduce the issue I was having in another project: https://github.com/varugasu/node-packages
esm-only
, thenpnpm build
lib
, thenpnpm build
app
, thenpnpm test
System Info
Used Package Manager
pnpm
Validations