Comments (2)
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.
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)
- `esnext` target doesn't transform using declarations but `es2022` does HOT 2
- Default exports not handled correctly when external=true and module is dynamically imported (node16)
- Is there a problem here? does this make sense? HOT 4
- Glob-style imports with partial directory name substitutions
- Option to assign default export to globalName for iife format HOT 3
- Running esbuild under npm explore no longer works HOT 1
- Allow destructuring for all target environments HOT 1
- re-create package.json with only externalized dependencies
- SyntaxError: The requested module X does not provide an export named Y since code modification HOT 1
- Cross-Platform Development Problem HOT 6
- CSS media query range syntax not downleveled
- Object rest and function scope HOT 4
- DCE doesn't remove unreferenced `new Regexp`. HOT 1
- CVE-2023-45288 HOT 3
- Throwing an error within a plugin does not stop the build
- Metafile not output to the `outdir` HOT 2
- Output is incorrect when there is an import declaration with an import clause that has one type only import specifier HOT 3
- invalid code generation HOT 3
- Building on top of esbuild Analyze HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from esbuild.