Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Must use import to load ES Module #30

Open
jessegeens opened this issue Jan 11, 2022 · 1 comment
Open

Must use import to load ES Module #30

jessegeens opened this issue Jan 11, 2022 · 1 comment

Comments

@jessegeens
Copy link

jessegeens commented Jan 11, 2022

I'm likely doing something wrong when importing solid-auth-fetcher, but I'm not sure what. I have included a relevant code snipper below:

Describe the bug
Trying to run example code from server.ts results in node crashing with the error: Must use import to load ES Module: /home/jesse/.../node_modules/node-fetch/src/index.js

To Reproduce
Put the following code snippet in a typescript file, and then run it with node:

import {getAuthFetcher, getNodeSolidServerCookie} from "solid-auth-fetcher";

async handleRequest(request: Request) {
    let serverRoot = this.configMgr.getRootConfig().serverRoot;
    let userPrefs = request.userPreferences;
    let appOrigin = request.from;
    const cookie = await getNodeSolidServerCookie(
      serverRoot,
      userPrefs.username,
      userPrefs.password
    );
    if (!cookie) {
      throw new AuthenticationError(
        `Could not sign in with given credentials for user ${userPrefs.username}`
      );
    }
    const fetcher = await getAuthFetcher(serverRoot, cookie, appOrigin);
    const result = await fetcher.fetch(request.resource);
  }

Expected behavior
The code to run without throwing a fatal error

Screenshots


internal/modules/cjs/loader.js:1102
      throw new ERR_REQUIRE_ESM(filename, parentPath, packageJsonPath);
      ^

Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /home/jesse/Documents/Thesis/master-thesis-jesse-geens/node_modules/node-fetch/src/index.js
require() of ES modules is not supported.
require() of /home/jesse/Documents/Thesis/master-thesis-jesse-geens/node_modules/node-fetch/src/index.js from /home/jesse/Documents/Thesis/master-thesis-jesse-geens/node_modules/solid-auth-fetcher/dist/obtainAuthHeaders.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules.
Instead rename index.js to end in .cjs, change the requiring code to use import(), or remove "type": "module" from /home/jesse/Documents/Thesis/master-thesis-jesse-geens/node_modules/node-fetch/package.json.

    at new NodeError (internal/errors.js:322:7)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1102:13)
    at Module.load (internal/modules/cjs/loader.js:950:32)
    at Function.Module._load (internal/modules/cjs/loader.js:790:12)
    at Module.require (internal/modules/cjs/loader.js:974:19)
    at require (internal/modules/cjs/helpers.js:93:18)
    at Object.<anonymous> (/home/jesse/Documents/Thesis/master-thesis-jesse-geens/node_modules/solid-auth-fetcher/dist/obtainAuthHeaders.js:8:38)
    at Module._compile (internal/modules/cjs/loader.js:1085:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
    at Module.load (internal/modules/cjs/loader.js:950:32) {
  code: 'ERR_REQUIRE_ESM'
}

Desktop (please complete the following information):

  • OS:
$ uname -a
Linux jesse-thinkpad 5.13.19-2-MANJARO #1 SMP PREEMPT Sun Sep 19 21:31:53 UTC 2021 x86_64 GNU/Linux
  • Browser [e.g. chrome, safari]: N/A
  • Version:
$ nvm current
v16.13.1

Additional context
Package.json:

"dependencies": {
    "express": "^4.17.2",
    "express-pino-logger": "^7.0.0",
    "jsonschema": "^1.4.0",
    "node-fetch": "^3.1.0",
    "pino": "^7.6.2",
    "solid-auth-fetcher": "^1.5.3"
  }
@jessegeens
Copy link
Author

jessegeens commented Jan 14, 2022

Changing const node_fetch_1 = __importDefault(require("node-fetch"));
to const node_fetch_1 = __importDefault(import("node-fetch"));
seems to solve the issue

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant