我有一个 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
)时,它会按预期工作。
因为相对导入路径在ESM中需要完整的扩展(我们必须编写 import "./foo.js" 而不是 import "./foo")
所以你有两种不同的解决方案:
.js
扩展名添加到导入文件或
--experimental-specifier-resolution=node
忽略运行时的扩展您可以通过在
--experimental-modules --es-module-specifier-resolution=node
中的启动脚本中添加 package.json
来完成此操作:
"scripts": {
"start": "nodemon --experimental-modules --es-module-specifier-resolution=node index.js"
},