Babel.js 通过Node.js中的ES6模块进行内联导入

wgx48brx  于 2023-09-28  发布在  Babel
关注(0)|答案(3)|浏览(163)

在Node.JS中管理模块(CommonJS模块)的“老方法”中,你可以这样做:
js.js路由示例:app.use('/user', require("./user"));
当我使用ES6模块(导入,导出)并通过Node.JS服务器通过babel转录时,如何做到这一点?
我不能就这么做:app.use('/user', import {user} from './user');

v1uwarro

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”。
我希望这能帮上忙。我相信你应该能够把这个应用到你的问题上。

umuewwlo

umuewwlo2#

尝试将其分离为多个表达式-import(以及export)在您尝试使用它的同一词法级别上不可用:

import { user } from './user'

...

app.use('/user', user)
tf7tbtn2

tf7tbtn23#

您可以使用以下语法实现您想要的功能:

app.use('/user', (await import('./user')).user)

相关问题