You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js ESM模式下如何导入控制台传入的动态文件名对应的JSON文件

解决方案

首先明确报错原因:ES 规范中的静态 import 语句属于编译时加载,会在代码运行前就解析导入路径,因此仅支持固定的字符串字面量,不支持模板字符串、变量这类需要运行时才能确定值的语法,你遇到的报错就是这个特性导致的。

要实现动态路径导入,可以用以下两种方案:

方案1:使用动态导入函数 import()

这是 ES 官方提供的动态加载方案,返回一个 Promise 对象,支持传入运行时计算的路径,在 Node.js 环境中导入 JSON 文件需要搭配类型断言使用:

// 支持顶层 await 的环境可直接写
const vis = process.argv[2];
const settings = (await import(`./${vis}.json`, { assert: { type: "json" } })).default;

// 不支持顶层 await 可以用自执行异步函数包裹
(async () => {
  const vis = process.argv[2];
  const settings = (await import(`./${vis}.json`, { assert: { type: "json" } })).default;
  // 此处写后续使用settings的业务逻辑
})();

方案2:针对JSON文件直接读取解析

如果仅需要加载 JSON 格式的文件,也可以直接用文件系统模块读取后解析,逻辑更直观:

import fs from 'fs/promises';
import path from 'path';

const vis = process.argv[2];
// 拼接绝对路径避免相对路径执行上下文异常
const filePath = path.resolve(process.cwd(), `${vis}.json`);
const settings = JSON.parse(await fs.readFile(filePath, 'utf-8'));

内容的提问来源于stack exchange,提问作者Nimrod Yanai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 07:27:00