vite-plugin-solid icon indicating copy to clipboard operation
vite-plugin-solid copied to clipboard

'Error: No known conditions for "./node" specifier in "msw" package' when using MSW with Vitest

Open cat841 opened this issue 2 years ago • 3 comments

Trying to import and use any function from MSW (specifically, msw/node) when running vitest prints this error:

 FAIL  src/testfile.test.ts [ src/testfile.test.ts ]
Error: No known conditions for "./node" specifier in "msw" package
 ❯ e node_modules/.pnpm/[email protected]_@[email protected]/node_modules/vite/dist/node/chunks/dep-bb8a8339.js:21445:25
 ❯ n node_modules/.pnpm/[email protected]_@[email protected]/node_modules/vite/dist/node/chunks/dep-bb8a8339.js:21445:646
 ❯ o node_modules/.pnpm/[email protected]_@[email protected]/node_modules/vite/dist/node/chunks/dep-bb8a8339.js:21445:1297
 ❯ resolveExportsOrImports node_modules/.pnpm/[email protected]_@[email protected]/node_modules/vite/dist/node/chunks/dep-bb8a8339.js:28746:20
 ❯ resolveDeepImport node_modules/.pnpm/[email protected]_@[email protected]/node_modules/vite/dist/node/chunks/dep-bb8a8339.js:28765:31
 ❯ tryNodeResolve node_modules/.pnpm/[email protected]_@[email protected]/node_modules/vite/dist/node/chunks/dep-bb8a8339.js:28453:20
 ❯ Context.resolveId node_modules/.pnpm/[email protected]_@[email protected]/node_modules/vite/dist/node/chunks/dep-bb8a8339.js:28212:28
 ❯ Object.resolveId node_modules/.pnpm/[email protected]_@[email protected]/node_modules/vite/dist/node/chunks/dep-bb8a8339.js:44276:32
 ❯ TransformContext.resolve node_modules/.pnpm/[email protected]_@[email protected]/node_modules/vite/dist/node/chunks/dep-bb8a8339.js:43992:23

This only happens when this plugin is present, removing it seems to fix the issue.

Not sure if this is a bug in the plugin, or a problem on msw's side, or if I'm maybe doing something wrong?

cat841 avatar Nov 03 '23 20:11 cat841

Had the same issue earlier today.

For those visiting this issue searching for solution, I went around this issue by adding an alias to resolve in the config file:

// vite.config.ts

export default defineConfig({
  // ...otherConfigs,
  resolve: {
    alias: [
      { find: "msw/node", replacement: "/node_modules/msw/lib/native/index.mjs"}
    ],
  }
})

Hope that helps.

sanghunjlee avatar Mar 04 '24 05:03 sanghunjlee

I created an https://github.com/mswjs/msw/issues/2092 at msw, but they said it's a problem of the framework (i.e. solid).

I still have to try the workaround they proposed, but the reason for the error is that vite-plugin-solid sets "browser" as resolve.conditions here.

This means that vite tries to load the browser-version of msw/node which does not exist.

According to @kettanaito it is wrong to use browser for node.js, I personally think it is debatable.

What I also noticed is that solid returns and empty render function when the resolve.conditions is set to "node". I don't really undestand why, but it seems wrong to assume that Node.js is only ever used for SSR.

nknapp avatar Mar 19 '24 20:03 nknapp

So, after some more insights, my last statement is wrong. My current stance is that the package.json of mock-service-worker is not entirely correct. The resolve.conditions applied in this module actuall contains node. So it should be possible to load msw/node

nknapp avatar Mar 23 '24 20:03 nknapp