Импортировать все файлы из каталога и имя файла карты в массив - PullRequest
0 голосов
/ 18 декабря 2018

У меня в настоящее время есть эта настройка с Vue и Webpack:

const imports = {
  foo: require('./folder/foo.yml'),
  bar: require('./folder/bar.yml')
}

Есть ли способ динамически добавлять больше ключей + значений с этой структурой, где ключ равен имени файла без расширения файла?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Пожалуйста, посмотрите, поможет ли это.

const testFolder = './tests/';
const fs = require('fs');

const imports = {}

fs.readdirSync(testFolder).forEach(file => {
    const filekey = file.split('.').slice(0, -1).join('.');
    imports[filekey] = require('./tests/' + file);
  });
0 голосов
/ 18 декабря 2018

Вы можете использовать Array#reduce для создания такого объекта, например:

var require = n => n;
var imports = ['foo', 'bar', 'baz', 'bat'].reduce((acc, val) => {
  acc[val] = require(`./folder/${val}`);
 return acc;
}, {})

console.log(imports);

Значения в массиве могут быть получены из чего-то вроде fs.readdirSync, поэтому мы могли бы иметь, например:

const ymlFiles = fs.readdirSync('./folder')
  .filter(filename => filename.split('.').reverse()[0] === 'yml');
const ymlFilesNoExt = ymlFiles.map(filename => filename.replace(/\.yml$/, ""))
const imports = ymlFilesNoExtvar require = n => n;
var imports = ['foo', 'bar', 'baz', 'bat'].reduce((acc, val) => {
  acc[val] = require(`./folder/${val}`);
 return acc;
}, {});

Надеюсь, это поможет,
С уважением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...