Code Monkey home page Code Monkey logo

Comments (2)

evanw avatar evanw commented on May 29, 2024

So I don't think "import 'echarts/lib/util/format';" is wrong. I think auto add extension ".js" is also needed when use the "*" match in package.json.

I think import 'echarts/lib/util/format' isn't valid because it doesn't work in node, and esbuild's implementation of exports follows node's specification for exports (node invented exports and has specified it very precisely).

Here's what node does:

$ npm init -y

$ npm i [email protected]

$ cat test.mjs
import { addCommas } from "echarts/lib/util/format";
console.log(addCommas);

$ node test.mjs
node:internal/modules/esm/resolve:265
    throw new ERR_MODULE_NOT_FOUND(
          ^

Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/workspaces/codespaces-blank/node_modules/echarts/lib/util/format' imported from /workspaces/codespaces-blank/test.mjs
    at finalizeResolution (node:internal/modules/esm/resolve:265:11)
    at moduleResolve (node:internal/modules/esm/resolve:933:10)
    at defaultResolve (node:internal/modules/esm/resolve:1157:11)
    at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:390:12)
    at ModuleLoader.resolve (node:internal/modules/esm/loader:359:25)
    at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:234:38)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:87:39)
    at link (node:internal/modules/esm/module_job:86:36) {
  code: 'ERR_MODULE_NOT_FOUND',
  url: 'file:///workspaces/codespaces-blank/node_modules/echarts/lib/util/format'
}

Node.js v20.12.1

Implicit extensions with the exports tool is something that the package author can control. If the package author wants implicit extensions to work, then they can use "./*": "./*.js" instead of "./*": "./*".

In the meantime, you can import from echarts/lib/util/format.js instead of echarts/lib/util/format. I don't thing esbuild needs any changes here as the error message for this is already very explicit:

✘ [ERROR] Could not resolve "echarts/lib/util/format"

    test.mjs:1:26:
      1 │ import { addCommas } from "echarts/lib/util/format";
        ╵                           ~~~~~~~~~~~~~~~~~~~~~~~~~

  The module "./lib/util/format" was not found on the file system:

    node_modules/echarts/package.json:215:11:
      215 │     "./*": "./*"
          ╵            ~~~~~

  Import from "echarts/lib/util/format.js" to get the file
  "node_modules/echarts/lib/util/format.js":

    test.mjs:1:50:
      1 │ import { addCommas } from "echarts/lib/util/format";
        │                                                   ^
        ╵                                                   .js

  You can mark the path "echarts/lib/util/format" as external to exclude it from the bundle, which
  will remove this error and leave the unresolved path in the bundle.

from esbuild.

thestarweb avatar thestarweb commented on May 29, 2024

Sorry, I just tried using webpack to build successfully, because most web projects are built with webpack, and the author who uses "import { addCommas } from 'echarts/lib/util/format'" has also told me he has never encountered this error with webpack and rollup. Perhaps webpack does not support the "exports" field. Now, I've tried using node and ts-node and got the same error. I also asked GPT, and it suggested omitting ".ts" but not ".js". Unfortunately, both packages are not under my control. I will report this issue to the author. But for now, I can only lock the version, and i don't thin that's not a good idea.

By the way, can you add a new mode to make the resolve behave like webpack in this situation?

from esbuild.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.