【问题标题】:Node requires file extension for import statement节点需要 import 语句的文件扩展名
【发布时间】:2021-04-28 13:40:23
【问题描述】:

我一直在构建一个打字稿应用程序,其中我从一个文件中导入了一些常量。 VS Code 的 Auto-Import 为我完成了这项工作,但是当我编译并运行文件时,它抛出了一个错误,因为它找不到模块。似乎错误来自导入语句没有文件扩展名,但它只出现在编译的 javascript 中,而不出现在 typescript 文件中。

index.ts:

import { __port__ } from "./constants";
import express from "express";
const app = express();
app.listen(__port__, () => console.log("listening on port" + __port__));

常量.ts:

export const __port__ = process.env.PORT || 3000;

node.js 错误信息:

Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/home/af2111/Desktop/Coding/myapp/server/dist/constants' imported from /home/af2111/Desktop/Coding/myapp/server/dist/index.js

【问题讨论】:

    标签: node.js typescript es6-modules


    【解决方案1】:

    我已修复它,我必须在导入语句中添加一个 .js 扩展名

    【讨论】:

    • 这是因为 node.js 遵循 ES6 标准,该标准禁止解释器猜测文件扩展名。如果您想在浏览器中使用纯 javascript 导入,您还需要添加文件扩展名。另一方面,Typescript 是在 ES6 最终确定之前基于导入语法提案实现的,因此它们遵循猜测文件扩展名的节点模块 (commonjs) 行为。然而,当 ES6 标准最终发布时,真正的标准不允许这样做。 Node 遵循真正的标准,而 typescript 打破了标准,因为标准还不存在
    • 谢谢你这个slebetman,我整天都在与这个错误作斗争。现在我只是被告知我不能用 *.ts 导入我的文件(尽管它们是打字稿文件)但必须调用它们 *.js 而不是 xD
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 2022-10-06
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多