使用Nodejs创建/更新JavaScript文件/代码

时间:2019-06-10 09:41:09

标签: javascript node.js fs

我需要创建一个JavaScript文件,该文件应包含以下代码。

const students= require('students');
const lecturers = require('lecturers');

const people = [
    {
        name: 'student',
        tag: 'student',
        libName: 'students'
    },
    {
        name: 'lecturer',
        tag: 'lecturer',
        libName: 'lecturers '
    }
]

module.exports = people;

目前,我设法使用Node.js中的 fs 模块创建了此文件。像这样

let peoples = {
        name: 'student',
        tag: 'student',
        libName: 'students'
    };

let data = `
   const ${peoples.libName} = require('${peoples.libName}'); 
   const people = [
     ${providers}
   ]
   module.exports = people;
 `;

    fs.writeFile(".pep.config.js", data, function(err) {
      if (err) {
        console.log('Fail')
      }
      console.log('Success')
    });

如何将值(人员对象)添加到人员数组,并将require语句添加到现有文件?使用当前方法,我一次只能添加一个数据。这样。

const students= require('students');

const people = [
    {
        name: 'student',
        tag: 'student',
        libName: 'students'
    }
]

module.exports = people;

1 个答案:

答案 0 :(得分:0)

给定设置的最简单方法,恕我直言:使用锚点作为注释来了解数组的边界:

   const providers = [
//ANCHOR_PROVIDERS_START
     ${providers}
//ANCHOR_PROVIDERS_END
   ]

然后进行更新,例如:

fileContent.replace(
  '//ANCHOR_PROVIDERS_END',
  `,${moreProviders}\n//ANCHOR_PROVIDERS_END`
);

您还可以使用起始锚点创建一个覆盖现有内容的功能。

但是,使用JSON也许更灵活:

   const providers = JSON.parse(
     ${providersAsJsonArray}
   );//ANCHOR_PROVIDERS_END

因此,您可以检索数组,以自己喜欢的方式对其进行更改,然后将其设置回文件中,如下所示:

fileContent.replace(
  /(const providers = JSON.parse\(\n)(.+)(\n\s*\);\/\/ANCHOR_PROVIDERS_END)/m,
  (match, starting, sjson, closing) => {
    const json = JSON.parse(sjson);
    // do something with json, which represents the existing array
    json.push({ some: 'new', value: 'is now inserted' });
    // inject the new content
    return `${starting}${JSON.stringify(json)}${closing}`;
  }
);

本着这种精神,并且因为这变得有些乏味,所以您还可以在相邻的.json文件中声明数据,然后从.pep.config.js中读取数据以填充变量。您甚至可以require使用它,但是要注意,require的{​​{3}}不会为您提供过时的JSON版本。