簡體   English   中英

使用 loader ts-node/esm.js 運行節點需要導入以具有 .js 擴展名

[英]running node with loader ts-node/esm.js requires imports to have the .js extension

我正在嘗試將 package.json 設置為模塊來運行節點 14:

"type": "module",

如果我在打字稿文件上運行此命令:

 node --loader ts-node/esm.mjs --experimental-top-level-await ./src/scripts/ts-build.ts --trace-warnings --experimental-json-modules

我在打字稿文件中有這樣的無擴展導入

import { logger } from './logger';

我得到

ERR_MODULE_NOT_FOUND

但是如果我把它改成

import { logger } from './logger.js';

有用。

為什么是這樣?

如果我們看一下規范,那么這部分說明:

當前的說明符解析不支持 CommonJS 加載器的所有默認行為。 行為差異之一是文件擴展名的自動解析以及導入具有索引文件的目錄的能力。

還有一個部分指出:

使用 import 關鍵字時必須提供文件擴展名。 目錄索引(例如'./startup/index.js')也必須完全指定。

所以看起來擴展實際上是必要的。 但是,您可以嘗試將選項--experimental-specifier-resolution設置為--experimental-specifier-resolution=node

我在 Node v14.15.0上使用這些實驗性功能解決了這個問題。

node --loader ts-node/esm --experimental-specifier-resolution=node your/entry.ts

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM