如何禁用 ES6 项目中导入/导出的文件扩展名(“.js”)需求?

问题描述 投票:0回答:2

我有一个 ts 模块。我正在使用

outDir
tsconfig.json
和命令
tsc -w
将此模块编译到另一个项目的特定文件夹。因此,每当我更新 ts 模块时,它都会将文件编译到其他项目,但在导入时会忘记文件扩展名。这意味着我每次都必须手动更新所有扩展,因为这是必须的??

因此,我寻找一种编译带有文件扩展名的 ts 文件的方法,但一无所获。 然后,我搜索了 ES6 项目中导入/导出所需的禁用文件扩展名(“.js”)。我找到了这个

...配置您的服务器以忽略扩展名...

但是他没有说如何配置。

编辑:

我正在使用

nodemon src/index.js

运行我的项目

当生成了一个没有扩展名的导入的js文件时,这是nodemon给出的错误:

[nodemon] restarting due to changes...
[nodemon] starting `node src/index.js`
internal/process/esm_loader.js:74
    internalBinding('errors').triggerUncaughtException(
                              ^

Error [ERR_MODULE_NOT_FOUND]: Cannot find module 'C:\Users\......\trendyol' imported from C:\Users\.......\index.js
    at finalizeResolution (internal/modules/esm/resolve.js:276:11)
    at moduleResolve (internal/modules/esm/resolve.js:699:10)
    at Loader.defaultResolve [as _resolve] (internal/modules/esm/resolve.js:810:11)
    at Loader.resolve (internal/modules/esm/loader.js:86:40)
    at Loader.getModuleJob (internal/modules/esm/loader.js:230:28)
    at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:56:40)
    at link (internal/modules/esm/module_job.js:55:36) {
  code: 'ERR_MODULE_NOT_FOUND'
}
[nodemon] app crashed - waiting for file changes before starting...

但是当我添加扩展(

js
)时,它会按预期工作。

javascript typescript ecmascript-6
2个回答
4
投票

因为相对导入路径在ESM中需要完整的扩展(我们必须编写 import "./foo.js" 而不是 import "./foo")

所以你有两种不同的解决方案:

  1. .js
    扩展名添加到导入文件

  1. 使用
    --experimental-specifier-resolution=node
    忽略运行时的扩展

1
投票

您可以通过在

--experimental-modules --es-module-specifier-resolution=node
中的启动脚本中添加
package.json
来完成此操作:

  "scripts": {
    "start": "nodemon --experimental-modules --es-module-specifier-resolution=node index.js"
  },
© www.soinside.com 2019 - 2024. All rights reserved.