镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

Language Server Crashes Immediately When Trying To Run on Rescript V12 Project #1181

Closed

Description

@Jakub684

[Info - 9:07:13 PM] Received initialize request from client.
node:internal/modules/esm/load:188
throw new ERR_UNSUPPORTED_ESM_URL_SCHEME(parsed, schemes);
^

Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file, data, node, and electron are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'
at throwIfUnsupportedURLScheme (node:internal/modules/esm/load:188:11)
at defaultLoad (node:internal/modules/esm/load:82:3)
at ModuleLoader.load (node:internal/modules/esm/loader:815:12)
at ModuleLoader.loadAndTranslate (node:internal/modules/esm/loader:594:31)
at #createModuleJob (node:internal/modules/esm/loader:624:36)
at #getJobFromResolveResult (node:internal/modules/esm/loader:343:34)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:311:41)
at async onImport.tracePromise.proto (node:internal/modules/esm/loader:664:25) {
code: 'ERR_UNSUPPORTED_ESM_URL_SCHEME'
}

Node.js v22.21.1
[Info - 9:07:13 PM] Connection to server got closed. Server will restart.
true
[Info - 9:07:13 PM] Received initialize request from client.
node:internal/modules/esm/load:188
throw new ERR_UNSUPPORTED_ESM_URL_SCHEME(parsed, schemes);
^

Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file, data, node, and electron are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'
at throwIfUnsupportedURLScheme (node:internal/modules/esm/load:188:11)
at defaultLoad (node:internal/modules/esm/load:82:3)
at ModuleLoader.load (node:internal/modules/esm/loader:815:12)
at ModuleLoader.loadAndTranslate (node:internal/modules/esm/loader:594:31)
at #createModuleJob (node:internal/modules/esm/loader:624:36)
at #getJobFromResolveResult (node:internal/modules/esm/loader:343:34)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:311:41)
at async onImport.tracePromise.proto (node:internal/modules/esm/loader:664:25) {
code: 'ERR_UNSUPPORTED_ESM_URL_SCHEME'
}

Node.js v22.21.1
[Info - 9:07:14 PM] Connection to server got closed. Server will restart.
true
[Info - 9:07:14 PM] Received initialize request from client.
node:internal/modules/esm/load:188
throw new ERR_UNSUPPORTED_ESM_URL_SCHEME(parsed, schemes);
^

Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file, data, node, and electron are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'
at throwIfUnsupportedURLScheme (node:internal/modules/esm/load:188:11)
at defaultLoad (node:internal/modules/esm/load:82:3)
at ModuleLoader.load (node:internal/modules/esm/loader:815:12)
at ModuleLoader.loadAndTranslate (node:internal/modules/esm/loader:594:31)
at #createModuleJob (node:internal/modules/esm/loader:624:36)
at #getJobFromResolveResult (node:internal/modules/esm/loader:343:34)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:311:41)
at async onImport.tracePromise.proto (node:internal/modules/esm/loader:664:25) {
code: 'ERR_UNSUPPORTED_ESM_URL_SCHEME'
}

Node.js v22.21.1
[Info - 9:07:14 PM] Connection to server got closed. Server will restart.
true
[Info - 9:07:14 PM] Received initialize request from client.
node:internal/modules/esm/load:188
throw new ERR_UNSUPPORTED_ESM_URL_SCHEME(parsed, schemes);
^

Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file, data, node, and electron are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'
at throwIfUnsupportedURLScheme (node:internal/modules/esm/load:188:11)
at defaultLoad (node:internal/modules/esm/load:82:3)
at ModuleLoader.load (node:internal/modules/esm/loader:815:12)
at ModuleLoader.loadAndTranslate (node:internal/modules/esm/loader:594:31)
at #createModuleJob (node:internal/modules/esm/loader:624:36)
at #getJobFromResolveResult (node:internal/modules/esm/loader:343:34)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:311:41)
at async onImport.tracePromise.proto (node:internal/modules/esm/loader:664:25) {
code: 'ERR_UNSUPPORTED_ESM_URL_SCHEME'
}

Node.js v22.21.1
[Info - 9:07:14 PM] Connection to server got closed. Server will restart.
true
[Info - 9:07:14 PM] Received initialize request from client.
node:internal/modules/esm/load:188
throw new ERR_UNSUPPORTED_ESM_URL_SCHEME(parsed, schemes);
^

Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file, data, node, and electron are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'
at throwIfUnsupportedURLScheme (node:internal/modules/esm/load:188:11)
at defaultLoad (node:internal/modules/esm/load:82:3)
at ModuleLoader.load (node:internal/modules/esm/loader:815:12)
at ModuleLoader.loadAndTranslate (node:internal/modules/esm/loader:594:31)
at #createModuleJob (node:internal/modules/esm/loader:624:36)
at #getJobFromResolveResult (node:internal/modules/esm/loader:343:34)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:311:41)
at async onImport.tracePromise.proto (node:internal/modules/esm/loader:664:25) {
code: 'ERR_UNSUPPORTED_ESM_URL_SCHEME'
}

Node.js v22.21.1
[Error - 9:07:14 PM] The ReScript Language Server server crashed 5 times in the last 3 minutes. The server will not be restarted. See the output for more information.
[Info - 9:11:19 PM] Received initialize request from client.
node:internal/modules/esm/load:188
throw new ERR_UNSUPPORTED_ESM_URL_SCHEME(parsed, schemes);
^

Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file, data, node, and electron are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'
at throwIfUnsupportedURLScheme (node:internal/modules/esm/load:188:11)
at defaultLoad (node:internal/modules/esm/load:82:3)
at ModuleLoader.load (node:internal/modules/esm/loader:815:12)
at ModuleLoader.loadAndTranslate (node:internal/modules/esm/loader:594:31)
at #createModuleJob (node:internal/modules/esm/loader:624:36)
at #getJobFromResolveResult (node:internal/modules/esm/loader:343:34)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:311:41)
at async onImport.tracePromise.proto (node:internal/modules/esm/loader:664:25) {
code: 'ERR_UNSUPPORTED_ESM_URL_SCHEME'
}

Node.js v22.21.1
[Info - 9:11:19 PM] Connection to server got closed. Server will restart.
true
[Info - 9:11:19 PM] Received initialize request from client.
node:internal/modules/esm/load:188
throw new ERR_UNSUPPORTED_ESM_URL_SCHEME(parsed, schemes);
^

Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file, data, node, and electron are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'
at throwIfUnsupportedURLScheme (node:internal/modules/esm/load:188:11)
at defaultLoad (node:internal/modules/esm/load:82:3)
at ModuleLoader.load (node:internal/modules/esm/loader:815:12)
at ModuleLoader.loadAndTranslate (node:internal/modules/esm/loader:594:31)
at #createModuleJob (node:internal/modules/esm/loader:624:36)
at #getJobFromResolveResult (node:internal/modules/esm/loader:343:34)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:311:41)
at async onImport.tracePromise.proto (node:internal/modules/esm/loader:664:25) {
code: 'ERR_UNSUPPORTED_ESM_URL_SCHEME'
}

Node.js v22.21.1
[Info - 9:11:19 PM] Connection to server got closed. Server will restart.
true
[Info - 9:11:19 PM] Received initialize request from client.
node:internal/modules/esm/load:188
throw new ERR_UNSUPPORTED_ESM_URL_SCHEME(parsed, schemes);
^

Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file, data, node, and electron are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'
at throwIfUnsupportedURLScheme (node:internal/modules/esm/load:188:11)
at defaultLoad (node:internal/modules/esm/load:82:3)
at ModuleLoader.load (node:internal/modules/esm/loader:815:12)
at ModuleLoader.loadAndTranslate (node:internal/modules/esm/loader:594:31)
at #createModuleJob (node:internal/modules/esm/loader:624:36)
at #getJobFromResolveResult (node:internal/modules/esm/loader:343:34)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:311:41)
at async onImport.tracePromise.proto (node:internal/modules/esm/loader:664:25) {
code: 'ERR_UNSUPPORTED_ESM_URL_SCHEME'
}

Node.js v22.21.1
[Info - 9:11:19 PM] Connection to server got closed. Server will restart.
true
[Info - 9:11:19 PM] Received initialize request from client.
node:internal/modules/esm/load:188
throw new ERR_UNSUPPORTED_ESM_URL_SCHEME(parsed, schemes);
^

Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file, data, node, and electron are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'
at throwIfUnsupportedURLScheme (node:internal/modules/esm/load:188:11)
at defaultLoad (node:internal/modules/esm/load:82:3)
at ModuleLoader.load (node:internal/modules/esm/loader:815:12)
at ModuleLoader.loadAndTranslate (node:internal/modules/esm/loader:594:31)
at #createModuleJob (node:internal/modules/esm/loader:624:36)
at #getJobFromResolveResult (node:internal/modules/esm/loader:343:34)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:311:41)
at async onImport.tracePromise.proto (node:internal/modules/esm/loader:664:25) {
code: 'ERR_UNSUPPORTED_ESM_URL_SCHEME'
}

Node.js v22.21.1
[Info - 9:11:19 PM] Connection to server got closed. Server will restart.
true
[Info - 9:11:19 PM] Received initialize request from client.
node:internal/modules/esm/load:188
throw new ERR_UNSUPPORTED_ESM_URL_SCHEME(parsed, schemes);
^

Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file, data, node, and electron are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'
at throwIfUnsupportedURLScheme (node:internal/modules/esm/load:188:11)
at defaultLoad (node:internal/modules/esm/load:82:3)
at ModuleLoader.load (node:internal/modules/esm/loader:815:12)
at ModuleLoader.loadAndTranslate (node:internal/modules/esm/loader:594:31)
at #createModuleJob (node:internal/modules/esm/loader:624:36)
at #getJobFromResolveResult (node:internal/modules/esm/loader:343:34)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:311:41)
at async onImport.tracePromise.proto (node:internal/modules/esm/loader:664:25) {
code: 'ERR_UNSUPPORTED_ESM_URL_SCHEME'
}

Node.js v22.21.1
[Error - 9:11:19 PM] The ReScript Language Server server crashed 5 times in the last 3 minutes. The server will not be restarted. See the output for more information.

Activity

  1. nojaf commented on Mar 3, 2026

    @nojaf
    Contributor

    Are you on Windows?
    Did you try out the prerelease version?

  2. Jakub684 commented on Mar 3, 2026

    @Jakub684
    Author

    Are you on Windows?
    Did you try out the prerelease version?

    Yes.
    The pre-release version has the same issue.
    I have even tried older versions and all of them experience the problem.

    The interesting thing is that it only happens on a Rescript v12 project for me. Rescript v11 doesn't crash.
    It also means that I am unable to even start the code analyser because of this as a result of the invalid file url scheme.

  3. ldokduy20 commented on May 3, 2026

    @ldokduy20

    This is happening to me too. The same error and stack trace like Jakub684, perhaps I think this is an issue regarding file URL scheme. A few searches tell me that Node expects the file:// suffix for ESM, but some code in either server/cli.ts or server/server.ts is calling it wrong. My project was created with npx create-rescript-app@latest with my package.json:

      "name": "helloworld",
      "version": "0.0.0",
      "scripts": {
        "res:build": "rescript",
        "res:clean": "rescript clean",
        "res:dev": "rescript watch"
      },
      "keywords": [
        "rescript"
      ],
      "author": "",
      "license": "MIT",
      "dependencies": {
        "rescript": "^12.2.0"
      }
    }
    

    and this rescript.json:

    {
      "name": "helloworld",
      "sources": {
        "dir": "src",
        "subdirs": true
      },
      "package-specs": {
        "module": "esmodule",
        "in-source": true
      },
      "suffix": ".res.mjs",
      "dependencies": [],
      "compiler-flags": []
    }
    

    Update: built the extension from source (without --minify)
    with Node v20.20.2
    And I got this stack trace:

    Node.js v22.22.0
    [Info  - 2:23:24 PM] Connection to server got closed. Server will restart.
    true
    Debugger listening on ws://127.0.0.1:6009/b0ec50a2-c737-4a91-a7ce-2252a26eb940
    For help, see: https://nodejs.org/en/docs/inspector
    [Info  - 2:23:24 PM] Received initialize request from client. Server version: 1.72.0
    node:internal/url:1614
        throw new ERR_INVALID_URL_SCHEME('file');
              ^
    
    TypeError [ERR_INVALID_URL_SCHEME]: The URL must be of scheme file
        at Object.fileURLToPath (node:internal/url:1614:11)
        at findBinary (c:\Users\DELL\Documents\Dell\rescript-vscode\server\out\cli.js:14110:43)
        at async findBinary2 (c:\Users\DELL\Documents\Dell\rescript-vscode\server\out\cli.js:14947:18)
        at async findReScriptVersionForProjectRoot (c:\Users\DELL\Documents\Dell\rescript-vscode\server\out\cli.js:14994:18)
        at async openedFile (c:\Users\DELL\Documents\Dell\rescript-vscode\server\out\cli.js:16560:26)
        at async process.onMessage (c:\Users\DELL\Documents\Dell\rescript-vscode\server\out\cli.js:17452:7) {
      code: 'ERR_INVALID_URL_SCHEME'
    }
    
    Node.js v22.22.0
    [Error - 2:23:24 PM] The ReScript Language Server server crashed 5 times in the last 3 minutes. The server will not be restarted. See the output for more information.
    

    So I changed the part at line 14110 from
    const { binPaths } = await import(url.fileURLToPath(targetPackagePath));
    into:
    const { binPaths } = await import(pathToFileURL(targetPackagePath).href);

    And now the server doesn't crash immediately upon startup. I don't know where this specific part of code is from yet. But changing it removed the crash.
    But now I noticed another issue: the extension asks me if I want to "Start Build for fresh diagnostics", I clicked Yes but it didn't work.

    The log:

    Debugger listening on ws://127.0.0.1:6009/3edda1bc-95a2-49e3-96c9-d26bcfb8966c
    For help, see: https://nodejs.org/en/docs/inspector
    [Info  - 3:17:31 PM] Received initialize request from client. Server version: 1.72.0
    [Info  - 3:17:32 PM] Prompting to start build for c:\Users\DELL\Documents\test-rescript\helloworld
    [Info  - 3:17:32 PM] Updating opened file file:///c%3A/Users/DELL/Documents/test-rescript/helloworld/src/Demo.res, incremental TC enabled: true
    [Info  - 3:17:44 PM] Starting build watcher for c:\Users\DELL\Documents\test-rescript\helloworld in c:\Users\DELL\Documents\test-rescript\helloworld (ReScript 12.2.0)
    [Info  - 3:17:44 PM] Running build watcher: c:\Users\DELL\Documents\test-rescript\helloworld\node_modules\rescript\cli\rescript.js watch in c:\Users\DELL\Documents\test-rescript\helloworld
    [Info  - 3:17:44 PM] Build watcher exited with code 1, signal null
    

    BUT, if I build my project with npx rescript build in my terminal first and return to VS Code, now the extension provides on-hover docs, autocomplete just normal.

    When introducing new identifiers, no accurate completion docs yet:
    Image

    But after running npx rescript build, things went smooth again:
    Image

    So basically the server crash was fixed (on my machine), but I haven't tried editing the code in server/src/
    And the extension doesn't automatically rebuild my project after each save yet. To get up-to-date completions I needed to run the build command myself.

  4. ldokduy20 commented on May 3, 2026

    @ldokduy20

    Running npx rescript watch works, but now the server sometimes need a restart when diagnostics are lagged behind. Quite annoying, but it works.

  5. Jakub684 commented on May 3, 2026

    @Jakub684
    Author

    Running npx rescript watch works, but now the server sometimes need a restart when diagnostics are lagged behind. Quite annoying, but it works.

    So, configuring the extension (for a workspace or even folder) in VSCode to use relative pathing allows me to set where rescript should look for the relevant files.
    Setting the target paths stops the crashing.

    However just like you said, the extension sometimes does lag behind and requires frequent restarting to keep it up to date.

  6. added a commit that references this issue on Sep 10, 2026
    11656c3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions