lavezzi1
@lavezzi1

Как импортировать все файлы из subfolders конкретного расширения?

Здравствуйте! Приложение на vue.js многостраничное. Каждая страница имеет свой entry файл, нужно пройтись и импортировать все эти файлы из всех папок.
getEntry.js
var path = require('path');
var glob = require('glob');

module.exports = getEntry;

function getEntry(sourcePath) {
  var entrys = {};
  var basename;
  glob.sync(sourcePath).forEach(function (entry) {
    basename = path.basename(entry,path.extname(entry));
    entrys[basename] = entry;
  });
  return entrys;
}


webpack.config.js

var getEntry = require('./bin/getEntry.js');
var entrys = getEntry('./app/src/views/**/*.js');

module.exports = {
  entry: entrys,
  .....
}


Сейчас работает если путь такой
./app/src/views/index/index.js
или
./app/src/views/about/about.js


Хочется получить возможно создать 'глубокую' структура например
./app/src/views/dashboard/index/index.js

./app/src/views/dashboard/control/control.js


Как решить? Желательно примерчик кода. Спасибо большое.
  • Вопрос задан
  • 202 просмотра
Решения вопроса 1
Чтобы сохранить структуру, нужно для каждого набора entries указывать соответствующий output.path. Это возможно только если экспортировать массив из конфигов:

var path = require('path');
var glob = require('glob');

var files = glob.sync('./app/src/views/**/*.js');
var dirs = getDirs(files);

var configs = [];

for (var dirname in dirs) {
    var files = dirs[dirname];

    configs.push({
        entry: getEntries(files),
        output: {
            path: dirname.replace('app/src/views', 'build'),
            filename: '[name].js'
        }
    });
}

module.exports = configs;



function getDirs(files) {
    var dirs = {};

    files.forEach(function (file) {
        var dirname = path.dirname(file);

        if (!dirs[dirname]) {
            dirs[dirname] = [];
        }

        dirs[dirname].push(file);
    });

    return dirs;
}

function getEntries(files) {
    var entries = {};

    files.forEach(function (file) {
        var name = path.basename(file, path.extname(file));

        entries[name] = file;
    });

    return entries;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы