.js定义的数据可以通过类似nodejs的fs模块进行更新保存吗?

我们知道node.js的fs模块,可以进行文件内容的更新:

请问:可操作以下的yaml文件和JSON文件,但是.js定义的数据可以吗?

例如:
data.js

const data = {
  points: [
    {
      id: 'point1',  
      x: 100,  
      y: 200,  
    },
    {
      id: 'point2',  
      x: 300,  
      y: 200,  
    },
  ],
  link: [
    {
      source: 'point1',  
      target: 'point2',  
    },
  ],
};

exports.data = data 

是否可以通过类似fs来进行数据的修改?

阅读 1.6k
2 个回答

提供一个简单的思路

  • 先把文件内容读出来
  • 用 new Function 跑一遍逻辑,把数据生成到 内存
  • 操作完数据再写回去
const fs = require('node:fs');

const code = fs.readFileSync('./data.js').toString();

const scope = {};
new Function('exports', code)(scope)

console.log(scope); // { data: [ { name: 'node' }, { name: 'node2' }, { name: 'node3' } ] }

scope.data.push({
    name: 'node4'
})

fs.writeFileSync('./data.js', `exports.data = ${JSON.stringify(scope.data, null, '\t')};`)

可以考虑使用 AST 去处理。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题