Node.js 导入导致 ERR_MODULE_NOT_FOUND

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

这是我如何构建和安装node.js(版本:20.11):

./configure --prefix=/home/tester/node
make -j8
make install

这是我设置环境的方法:

export PATH=/home/tester/node/bin:$PATH
export NODE_PATH=/home/tester/node/lib/node_modules

这是我安装要导入的模块的方法:

npm install -g express

/tmp/test/package.json的内容:

{
    "description": "Test me",
    "type": "module"
}

/tmp/test/test.js 的内容:

import express from 'express'

这是我执行 test.js 的方式:

node /tmp/test/test.js

这是我执行 test.js 时发生的情况:

node:internal/process/esm_loader:34
      internalBinding('errors').triggerUncaughtException(
                                ^

Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'express' imported from /tmp/test/test.js
Did you mean to import express/index.js?

如果我只是删除 package.json 中的行

"type": "module"
,并将
import express from 'express'
更改为
const express = require('express')
,那么它就可以工作。那么仅仅使用
import
有什么问题呢?我是 Node.js 新手,不知道如何解决这个问题。请有人帮助我,非常感谢!

node.js requirejs jsimport
1个回答
0
投票

对于

import
的工作方式,这是 NodeJS 团队有意采取的行动。它背后有一段历史,但它源于很久以前做出的决定,即 ESM 导入将在 TypeScript 早期自动解析索引文件和扩展(很像
require
)。

使用 NodeJS ESM 导入(不是 TypeScript ESM 导入)时,您必须指定文件名以及扩展名。

具体而言,他们没有在 JSON 包中指定任何信息来帮助支持 ESM 导入,也不打算将其代码库从 CommonJS 重构为 ESM。


    https://github.com/expressjs/express/issues/4933
如果您足够关心深入了解有关 NodeJS 和
express

的一些对话,最近在

此 GitHub 问题上
提出了这一点

© www.soinside.com 2019 - 2024. All rights reserved.