esbuild-dev-server icon indicating copy to clipboard operation
esbuild-dev-server copied to clipboard

UnhandledPromiseRejectionWarning: Error: spawn /Users/user/template/node_modules/esbuild-dev-server/lib/../../esbuild-dev-server-darwin-x64/devserver EACCES

Open uns3t opened this issue 2 years ago • 7 comments

when i use this plugin, an error occurred

(node:63759) UnhandledPromiseRejectionWarning: Error: spawn /Users/react-esbuild-template/node_modules/esbuild-dev-server/lib/../../esbuild-dev-server-darwin-x64/devserver EACCES
    at Process.ChildProcess._handle.onexit (internal/child_process.js:269:19)
    at onErrorNT (internal/child_process.js:467:16)
    at processTicksAndRejections (internal/process/task_queues.js:82:21)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:63759) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:63759) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

and esbuild code is:

const esbuild = require('esbuild');
const { lessLoader } = require('esbuild-plugin-less');
const { htmlPlugin } = require('@craftamap/esbuild-plugin-html');
const esBuildDevServer = require("esbuild-dev-server")

const htmlPluginOptions = {
    files: [
        {
            entryPoints: [
                'src/app.tsx',
            ],
            filename: 'index.html',
            htmlTemplate: `
                <!DOCTYPE html>
                <html lang="en">
                <head>
                    <meta charset="UTF-8">
                    <meta name="viewport" content="width=device-width, initial-scale=1.0">
                    <title>React-esbuild-template</title>
                </head>
                <body>
                    <div id="root">
                    </div>
                </body>
                </html>
            `,
        },
    ]
}

const options = {
    entryPoints: ['src/app.tsx'],
    bundle: true,
    metafile: true, // needs to be set
    outdir: 'dist/', // needs to be set
    plugins: [
        htmlPlugin(htmlPluginOptions),
        lessLoader()
    ],
    loader: {
        '.ts': 'ts',
    },
}

esBuildDevServer.start(
        esbuild.build(options),
        {
            port:      "10002", // optional, default: 8080
            watchDir:  "src", // optional, default: "src"
            index:     "dist/index.html", // optional
            staticDir: "dist", // optional
            onBeforeRebuild: {}, // optional
            onAfterRebuild:  {}, // optional
        }
)

uns3t avatar Nov 17 '21 03:11 uns3t

Hello. Thank you for contacting.

esbuild-dev-server calling rebuild repeatedly with the same options. esbuild requires incremental: true property in options for this. Read more: https://esbuild.github.io/api/#incremental

Add this property to the options and try again.

const options = {
    entryPoints: ['src/app.tsx'],
    bundle: true,
    metafile: true, // needs to be set
    outdir: 'dist/', // needs to be set
    incremental: true, // !important
    plugins: [
        htmlPlugin(htmlPluginOptions),
        lessLoader()
    ],
    loader: {
        '.ts': 'ts',
    },
}

Falldot avatar Nov 17 '21 06:11 Falldot

I get the same error, and I made sure to use incremetal: true

esBuildDevServer.start(build({
  sourcemap: true,
  entryPoints: ['src/index.tsx'],
  bundle: true,
  outdir: 'build',
  platform: 'browser',
  minify: true,
  keepNames: true,
  target: 'es6',
  plugins: [
    lessLoader(),
  ],
  metafile: true,
  incremental: true,
}), {
  port:      '3000',
  watchDir:  'src',
  index:     'build/index.html',
  staticDir: 'build',
})

nikolamus avatar Nov 26 '21 14:11 nikolamus

Please send the full text of your error. What OS do you use? At what point do you get the error?

Falldot avatar Nov 26 '21 15:11 Falldot

I get this error when I try running the server with the options above. I use MacOS 11.6

(node:90358) UnhandledPromiseRejectionWarning: Error: spawn /Users/nikolamusikic/vt/vacationtracker/node_modules/esbuild-dev-server/lib/../../esbuild-dev-server-darwin-x64/devserver EACCES
    at Process.ChildProcess._handle.onexit (internal/child_process.js:269:19)
    at onErrorNT (internal/child_process.js:467:16)
    at processTicksAndRejections (internal/process/task_queues.js:82:21)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:90358) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:90358) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

nikolamus avatar Nov 26 '21 15:11 nikolamus

This happens, because the server binary is not set as executable. Same happens in Linux. Manually making it executable works.

Looking at the makefile and the paths in it, you probably build on Unix-type OS or WSL, so you probably just need a chmod here and there in the makefile.

bundyo avatar Nov 30 '21 08:11 bundyo

Indeed - running chmod u+x node_modules/esbuild-dev-server-darwin-x64/devserver as a patch till fixed

cyberwombat avatar Dec 23 '21 21:12 cyberwombat

For Ubuntu you can run chmod u+x node_modules/esbuild-dev-server-linux-x64/devserver

alexandrubagu avatar Jul 07 '22 11:07 alexandrubagu