Создать / обновить файл / код JavaScript с помощью Nodejs - PullRequest
0 голосов
/ 10 июня 2019

Мне нужно создать файл 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;

В настоящее время мне удалось создать этот файл с помощью модуля fs в nodejs.Вот так

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 голосов
/ 10 июня 2019

Самый простой способ, учитывая ваши настройки, ИМХО: используйте привязки в качестве комментариев, чтобы знать границы вашего массива:

   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, но будьте осторожны, так как кеш не предоставляет вам устаревшую версию JSON.

...