在Node.JS中管理模块(CommonJS模块)的“老方法”中,你可以这样做:js.js路由示例:app.use('/user', require("./user"));当我使用ES6模块(导入,导出)并通过Node.JS服务器通过babel转录时,如何做到这一点?我不能就这么做:app.use('/user', import {user} from './user');
app.use('/user', require("./user"));
app.use('/user', import {user} from './user');
v1uwarro1#
有一种方法可以在node中进行动态内联导入,详细信息如下:https://javascript.info/modules-dynamic-imports这段代码对我很有用:
let {default: foo} = await import('./foo.js');
下面是我在node中作为数据库迁移工具的一部分编写的函数的工作示例。
const getMigrations = async (path) => { const migrateDir = await fs.readdirSync(path); const migrations = await Promise.all(migrateDir.map(async (filename) => { let {default: migration} = await import(`${path}/${filename}`); return migration; })); migrations.sort((a, b) => { return a.seq - b.seq; }); return migrations; };
其中,示例迁移如下所示:
export default { seq: 1.1, label: 'create user table', sql: ` DROP TABLE IF EXISTS user; CREATE TABLE user ( ... ); ` };
我使用的是node v12.18.4和“type”:我的package.json中的“module”。当我运行脚本时,我得到一个警告,ESM模块加载器是实验性的,但它工作正常。然而,上面链接的页面上有一条注解说:动态导入在常规脚本中工作,它们不需要script type=“module”。我希望这能帮上忙。我相信你应该能够把这个应用到你的问题上。
umuewwlo2#
尝试将其分离为多个表达式-import(以及export)在您尝试使用它的同一词法级别上不可用:
import
export
import { user } from './user' ... app.use('/user', user)
tf7tbtn23#
您可以使用以下语法实现您想要的功能:
app.use('/user', (await import('./user')).user)
3条答案
按热度按时间v1uwarro1#
有一种方法可以在node中进行动态内联导入,详细信息如下:https://javascript.info/modules-dynamic-imports
这段代码对我很有用:
下面是我在node中作为数据库迁移工具的一部分编写的函数的工作示例。
其中,示例迁移如下所示:
我使用的是node v12.18.4和“type”:我的package.json中的“module”。当我运行脚本时,我得到一个警告,ESM模块加载器是实验性的,但它工作正常。然而,上面链接的页面上有一条注解说:
动态导入在常规脚本中工作,它们不需要script type=“module”。
我希望这能帮上忙。我相信你应该能够把这个应用到你的问题上。
umuewwlo2#
尝试将其分离为多个表达式-
import
(以及export
)在您尝试使用它的同一词法级别上不可用:tf7tbtn23#
您可以使用以下语法实现您想要的功能: