egoist / tsup

The simplest and fastest way to bundle your TypeScript libraries.
https://tsup.egoist.dev
MIT License
9k stars 217 forks source link

Bug: The plugin "native-node-modules" didn't set a resolve directory for the file #589

Closed jlarmstrongiv closed 2 years ago

jlarmstrongiv commented 2 years ago

I am trying to make my own cli version of https://github.com/githubocto/repo-visualizer, and bundle it with tsup. This means bundling for node, while including react for svg rendering.

My current config includes:

{
  skipNodeModulesBundle: true,
  '--': [],
  entry: [ 'src/index.tsx', 'src/cli.tsx' ],
  inject: [ './inject-react-import.js' ],
  external: [ 'react' ],
  format: [ 'esm', 'cjs', 'iife' ],
  silent: true,
  minify: true,
  incremental: true,
  dts: true,
  sourcemap: true,
  clean: false,
  splitting: false
}

and the ./inject-react-import.js is:

import * as React from "react";

export { React };

This error was actually quite hard to find any info on. However, I believe the root cause is from https://github.com/egoist/tsup/blob/da9011f924e5b628505498cf8866b91a09208fe3/src/esbuild/native-node-module.ts

The full error message is:

✘ [ERROR] Could not resolve "/Users/jlarmst/Desktop/monorepos/turbo-monorepo/node_modules/react-dom/server.node.js"

    node-file:/Users/jlarmst/Desktop/monorepos/turbo-monorepo/node_modules/react-dom/server.node.js:2:27:
      2 │           import path from "/Users/jlarmst/Desktop/monorepos/turbo-monorepo/node_modules/react-dom/server.node.js"
        ╵                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  The plugin "native-node-modules" didn't set a resolve directory for the file
  "node-file:/Users/jlarmst/Desktop/monorepos/turbo-monorepo/node_modules/react-dom/server.node.js",
  so esbuild did not search for
  "/Users/jlarmst/Desktop/monorepos/turbo-monorepo/node_modules/react-dom/server.node.js" on the
  file system.

IIFE Build failed
Error: Build failed with 1 error:
node-file:/Users/jlarmst/Desktop/monorepos/turbo-monorepo/node_modules/react-dom/server.node.js:2:27: ERROR: Could not resolve "/Users/jlarmst/Desktop/monorepos/turbo-monorepo/node_modules/react-dom/server.node.js"
    at failureErrorWithLog (/Users/jlarmst/Desktop/monorepos/turbo-monorepo/node_modules/esbuild/lib/main.js:1605:15)
    at /Users/jlarmst/Desktop/monorepos/turbo-monorepo/node_modules/esbuild/lib/main.js:1251:28
    at runOnEndCallbacks (/Users/jlarmst/Desktop/monorepos/turbo-monorepo/node_modules/esbuild/lib/main.js:1036:63)
    at buildResponseToResult (/Users/jlarmst/Desktop/monorepos/turbo-monorepo/node_modules/esbuild/lib/main.js:1249:7)
    at /Users/jlarmst/Desktop/monorepos/turbo-monorepo/node_modules/esbuild/lib/main.js:1358:14
    at /Users/jlarmst/Desktop/monorepos/turbo-monorepo/node_modules/esbuild/lib/main.js:668:9
    at handleIncomingPacket (/Users/jlarmst/Desktop/monorepos/turbo-monorepo/node_modules/esbuild/lib/main.js:765:9)
    at Socket.readFromStdout (/Users/jlarmst/Desktop/monorepos/turbo-monorepo/node_modules/esbuild/lib/main.js:635:7)
    at Socket.emit (events.js:400:28)
    at addChunk (internal/streams/readable.js:293:12)

My current workarounds include using:

import ReactDOMServer from "react-dom/server.js";

not

import ReactDOMServer from "react-dom/server";

and removingiife from tsupConfig.format entirely.

Also, tsup really seems to hate lodash, and only lodash-es seems to work. Makes migrating old code more difficult.

Possibly related https://github.com/evanw/esbuild/issues/1051

Upvote & Fund

Fund with Polar

jlarmstrongiv commented 2 years ago

Related https://github.com/egoist/tsup/issues/579

yovanoc commented 2 years ago

related too https://github.com/evanw/esbuild/issues/2148

github-actions[bot] commented 2 years ago

:tada: This issue has been resolved in version 5.12.3 :tada:

The release is available on:

Your semantic-release bot :package::rocket:

jlarmstrongiv commented 2 years ago

Confirmed fix, thanks @egoist 🎉