以“旧方式”管理Node.JS(CommonJS模块)中的模块,您可以执行以下操作:
Express.js路由示例:app.use('/user', require("./user"));
当我使用ES6模块(导入,导出)并通过babel通过Node.JS服务器进行转录时,该怎么做?
我不能只是做:app.use('/user', import {user} from './user');
答案 0 :(得分:1)
尝试将其分成多个表达式-import
(以及export
)在与尝试使用该示例相同的词汇级别上不可用:
import { user } from './user'
...
app.use('/user', user)
答案 1 :(得分:0)
有一种方法可以在 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
(
...
);
`
};
我在 package.json 中使用带有 "type": "module" 的节点 v12.18.4。当我运行脚本时,我收到一条警告,指出 ESM 模块加载器是实验性的,但它可以工作。但是,上面链接的页面上有一条说明:
<块引用>动态导入在常规脚本中工作,它们不需要 script type="module"。
我希望这会有所帮助。我相信您应该能够将其应用于您的问题。