Node.js无法导入 ES6 模块



我正在尝试将我的路由分离到routes.js中的单独模块,然后在app.js中导入。我在控制台中收到很多错误。

internal/modules/esm/default_resolve.js:96 let url = moduleWrapResolve(specifier, parentURL); ^ Error: Cannot find module /Users/rhoxh/Desktop/24/routes imported from /Users/rhoxh/Desktop/24/app.js at Loader.resolve [as _resolve] (internal/modules/esm/default_resolve.js:96:13) at Loader.resolve (internal/modules/esm/loader.js:73:33) at Loader.getModuleJob (internal/modules/esm/loader.js:147:40) at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:41:40) at link (internal/modules/esm/module_job.js:40:36) { code: 'ERR_MODULE_NOT_FOUND' }

路线.js

import express from 'express';
const router = express.Router();
router.get('/', (req, res) => {
res.send('home page');
});
export default router;

应用.js

import express from 'express';
import { router } from './routes';
const app = express();
const PORT = 8080;
app.listen(PORT, () => {
console.log(`Server running at: http://localhost:${PORT}/`);
});
// Routes
app.use('/', router);

我在这里做错了什么?

您需要使用完整的文件名:

import router from './routes.js';

从文档中:

模块名称

要从中导入的模块。这通常是相对的或 包含模块的.js文件的绝对路径名。一定 捆绑商可以允许或要求使用该扩展;检查您的 环境。只允许单引号和双引号字符串。

您可以查看此链接,它可以帮助您 https://github.com/nodejs/node/issues/27408

您可以尝试按照它所说的使用--es-module-specifier-resolution=node

对于任何寻找打字稿解决方案的人,请使用转译文件的.js文件扩展名。

// index.ts file.
import router from './routes.js';

您正在解构导入,但您正在导出为default。 导入默认值时,无需解构

import router from './routes';

使用命名导出时,可以使用解构

export const router = express.Router()

或者你从default export中提取一个属性

export default {
router: express.Router()
}

最新更新