solidjs / vite-plugin-solid

A simple integration to run solid-js with vite
440 stars 51 forks source link

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

Open catannoyance opened 1 year ago

catannoyance commented 1 year ago

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/vite@4.5.0_@types+node@20.8.10/node_modules/vite/dist/node/chunks/dep-bb8a8339.js:21445:25
 ❯ n node_modules/.pnpm/vite@4.5.0_@types+node@20.8.10/node_modules/vite/dist/node/chunks/dep-bb8a8339.js:21445:646
 ❯ o node_modules/.pnpm/vite@4.5.0_@types+node@20.8.10/node_modules/vite/dist/node/chunks/dep-bb8a8339.js:21445:1297
 ❯ resolveExportsOrImports node_modules/.pnpm/vite@4.5.0_@types+node@20.8.10/node_modules/vite/dist/node/chunks/dep-bb8a8339.js:28746:20
 ❯ resolveDeepImport node_modules/.pnpm/vite@4.5.0_@types+node@20.8.10/node_modules/vite/dist/node/chunks/dep-bb8a8339.js:28765:31
 ❯ tryNodeResolve node_modules/.pnpm/vite@4.5.0_@types+node@20.8.10/node_modules/vite/dist/node/chunks/dep-bb8a8339.js:28453:20
 ❯ Context.resolveId node_modules/.pnpm/vite@4.5.0_@types+node@20.8.10/node_modules/vite/dist/node/chunks/dep-bb8a8339.js:28212:28
 ❯ Object.resolveId node_modules/.pnpm/vite@4.5.0_@types+node@20.8.10/node_modules/vite/dist/node/chunks/dep-bb8a8339.js:44276:32
 ❯ TransformContext.resolve node_modules/.pnpm/vite@4.5.0_@types+node@20.8.10/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?

sanghunjlee commented 8 months ago

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.

nknapp commented 8 months ago

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 commented 7 months ago

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