Yarn 3和Node 17:文件扩展名解析失败?

8
升级到带有Yarn Plug'n'Play(抛弃node_modules)的Yarn 3.0后,启动Node时文件名解析出现了问题。server.js 成功启动后,它会尝试解析项目中第一个导入的文件util.js ,但是路径解析失败,除非我在文件名中显式添加.js。我希望不必在整个项目中更新所有路径。
我能否使Yarn和Node自动解析.js文件扩展名?
Yarn 3.1.0,Node 17.0.1
yarn node server.js # Automatically uses Yarn's .pnp.cjs, right?

// server.js excerpt
import util from "/tools/util"; // <--  No worky
import util from "/tools/util.js"; // <-- ✅ Worky

错误信息:
/Users/me/repo/.pnp.cjs:22839
  return Object.defineProperties(new Error(message), {
                                 ^

Error: Qualified path resolution failed - none of those files can be found on the disk.

Source path: /Users/me/repo/server/util
Not found: /Users/me/repo/server/util

    at internalTools_makeError (/Users/me/repo/.pnp.cjs:22839:34)
    at resolveUnqualified (/Users/me/repo/.pnp.cjs:24238:13)
    at resolveRequest (/Users/me/repo/.pnp.cjs:24271:14)
    at Object.resolveRequest (/Users/me/repo/.pnp.cjs:24343:26)
    at resolve$1 (file:///Users/me/repo/.pnp.loader.mjs:205:25)
    at ESMLoader.resolve (node:internal/modules/esm/loader:422:30)
    at ESMLoader.getModuleJob (node:internal/modules/esm/loader:222:40)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:76:40)
    at link (node:internal/modules/esm/module_job:75:36)

我也遇到了完全相同的问题。降级到 Node 16 并不能解决这个问题。我使用的是 Yarn 3.1.1 和 Node 17.4.0。等我弄清楚了会在这里回报。 - sastraxi
2个回答

0

这个问题不是关于TypeScript的,但还是谢谢。是的,最终我不得不重写所有的导入语句,加上.js后缀,虽然很烦人,但显然是必要的。 - Michael Johansen

-2
我成功地解决了这个问题,但却放弃了 PnP。这是我解决问题的方法:
首先,在实际运行代码的 node 命令中添加 --experimental-specifier-resolution=node。我正在使用 TypeScript,所以我的最终命令看起来像:
tsc-watch --onSuccess \"node --experimental-specifier-resolution=node ./lib/index.js\"

我本以为这个标志会在 PnP 中起作用,但实际上并没有。所以我进入了 .yarnrc.yml 并添加了以下行:
nodeLinker: node-modules

重新运行yarn后,我能够yarn dev并运行我的应用程序。我真的不确定为什么 PnP 在这里没有起作用,但是为了让事情实际上能够工作,我可以牺牲本地配置的“纯度”。

对于那些运行 yarn 工作区和 TypeScript 的人来说,最后一个关键点是确保您的package.json文件指向编译后的 JavaScript 而不是 TypeScript 文件,例如对于一个lib/输出目录:

  "type": "module",
  "main": "lib/index.js",
  "types": "lib/index.d.ts",

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接