You need to enable JavaScript to run this app. 如何使用Node.js读取JS文件并将其默认导出模块解析为JSON
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Node.js读取JS文件并将其默认导出模块解析为JSON

解决方案

方案1:使用Node.js原生模块导入(推荐)

该方案直接复用Node.js内置的ES Module加载逻辑,无需手动解析源码,实现成本最低,适合sample.js依赖都已安装的场景。

如果你的项目是CommonJS规范(package.json中无"type": "module"配置),可以用动态import()表达式加载ESM模块:

const fs = require("fs");

async function getDefaultExport() {
  // 动态导入ES Module
  const sampleModule = await import("./sample.js");
  // 取默认导出内容
  const defaultExport = sampleModule.default;
  // 直接转JSON字符串
  const targetJsonStr = JSON.stringify(defaultExport);
  console.log(targetJsonStr);
  // 如需JS对象直接用defaultExport即可,无需额外JSON.parse
  return defaultExport;
}

getDefaultExport().catch(console.error);

如果你的项目是ESM规范(package.json中有"type": "module"配置),可以直接用顶层导入:

import sample from "./sample.js";
const targetJsonStr = JSON.stringify(sample);
console.log(targetJsonStr);

方案2:静态解析JS源码AST(无需执行依赖)

如果sample.js中导入的依赖不需要安装,仅需要提取静态默认导出内容,可以通过解析JS抽象语法树(AST)实现,不需要执行完整的sample.js代码。

首先安装依赖:

npm install @babel/parser @babel/traverse

实现代码:

const fs = require("fs/promises");
const parser = require("@babel/parser");
const traverse = require("@babel/traverse").default;

async function parseDefaultExportFromCode() {
  const code = await fs.readFile("./sample.js", "utf8");
  // 解析ESM代码为AST
  const ast = parser.parse(code, {
    sourceType: "module",
  });

  let exportVarName;
  // 第一步:定位export default语句,拿到导出的变量名
  traverse(ast, {
    ExportDefaultDeclaration(path) {
      if (path.node.declaration.type === "Identifier") {
        exportVarName = path.node.declaration.name;
      }
    },
  });

  if (!exportVarName) throw new Error("未找到默认导出内容");

  let exportValue;
  // 第二步:定位对应变量的声明,提取值
  traverse(ast, {
    VariableDeclarator(path) {
      if (path.node.id.name === exportVarName) {
        // 截取变量初始化部分的代码,直接求值
        const initCode = code.slice(path.node.init.start, path.node.init.end);
        exportValue = eval(`(${initCode})`);
      }
    },
  });

  const targetJsonStr = JSON.stringify(exportValue);
  console.log(targetJsonStr);
  return exportValue;
}

parseDefaultExportFromCode().catch(console.error);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 04:45:03