如何将节点模块导入路径设置为变量?

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

我有 2 个独立的文件,其中包含各种 JS 函数。我想根据条件导入其中之一。我不确定该怎么做。

我有:

import { mainURL } from '../../support/helperFunctions.js';

let dataPath = '../../../data/data.js';
if (mainURL.includes('dev')) {
    dataPath = '../../../data/dataDev.js';
}
import { coreData, lastUpdated } from dataPath;

但是我收到导入行的错误

Unexpected token

我也尝试过

if (mainURL.includes('dev')) {
    import { coreData, lastUpdated } from '../../../data/dataDev.js';
}
else {
    import { coreData, lastUpdated } from '../../../data/data.js';
}

还有其他一些变体。

有人知道如何在节点中实现这一点吗?

javascript node.js node-modules
1个回答
0
投票

使用动态

import()
语法,这是一个函数,允许您在运行时有条件地导入模块。实施方法如下:

import { mainURL } from '../../support/helperFunctions.js';

let dataModule;

if (mainURL.includes('dev')) {
    dataModule = import('../../../data/dataDev.js');
} else {
    dataModule = import('../../../data/data.js');
}

// Use an async function to handle the dynamic import and access the module's exports
async function loadData() {
    const { coreData, lastUpdated } = await dataModule;
    console.log(coreData, lastUpdated);
    // You can now use coreData and lastUpdated as needed
}

// Call loadData() to trigger the import
loadData();
  1. 动态导入
    import()
    返回一个promise,因此我们可以使用
    await
    来获取模块的导出。
  2. 异步函数:由于
    import()
    是异步的,因此您需要将其包装在异步函数中来处理promise。
(async () => {
  if (somethingIsTrue) {
    // import module for side effects
    await import("/modules/my-module.js");
  }
})();

参考这篇文章: 动态导入 MDN

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