помогите настроить сборку gulp + webpack

я скачал готовую сборку галпа + вебпака, пользуюсь ей уже давно, в галпе и вебпаке не разбираюсь, проблема в том что мне нужно получить массив из файла products.json, если я заливаю сайт на гитхаб то там все работает, как я понял мне нужно настроить сборку, может кто-то поможет решить проблему

----------файл "gulpfile.js"


// Импорт основного модуля
import gulp from "gulp";
// Импорт общих плагинов
import { plugins } from "./config/gulp-plugins.js";
// Импорт путей
import { path } from "./config/gulp-settings.js";

// Передаем значения в глобальную переменную
global.app = {
    isBuild: process.argv.includes('--build'),
    isDev: !process.argv.includes('--build'),
    isWebP: !process.argv.includes('--nowebp'),
    isFontsReW: process.argv.includes('--rewrite'),
    gulp: gulp,
    path: path,
    plugins: plugins
}

// Импорт задач
import { reset } from "./config/gulp-tasks/reset.js";
import { html } from "./config/gulp-tasks/html.js";
import { css } from "./config/gulp-tasks/css.js";
import { js } from "./config/gulp-tasks/js.js";
import { json } from "./config/gulp-tasks/json.js";
import { jsDev } from "./config/gulp-tasks/js-dev.js";
import { images } from "./config/gulp-tasks/images.js";
import { ftp } from "./config/gulp-tasks/ftp.js";
import { zip } from "./config/gulp-tasks/zip.js";
import { sprite } from "./config/gulp-tasks/sprite.js";
import { gitignore } from "./config/gulp-tasks/gitignore.js";
import { otfToTtf, ttfToWoff, fonstStyle } from "./config/gulp-tasks/fonts.js";

// Последовательная обработака шрифтов
const fonts = gulp.series(reset, otfToTtf, ttfToWoff, fonstStyle);
// Основные задачи будем выполнять параллельно после обработки шрифтов
const devTasks = gulp.parallel(fonts, gitignore);
// Основные задачи будем выполнять параллельно после обработки шрифтов
const buildTasks = gulp.series(fonts, jsDev, js, json, gulp.parallel(html, css, images, gitignore));

// Экспорт задач
export { html }
export { css }
export { js }
export { jsDev }
export { images }
export { fonts }
export { sprite }
export { ftp }
export { zip }
export { json }

// Построение сценариев выполнения задач
const development = gulp.series(devTasks);
const build = gulp.series(buildTasks);
const deployFTP = gulp.series(buildTasks, ftp);
const deployZIP = gulp.series(buildTasks, zip);

// Экспорт сценариев
export { development }
export { build }
export { deployFTP }
export { deployZIP }

// Выполнение сценария по умолчанию
gulp.task('default', development);

---------файл "webpack.dev.js"


import fs from 'fs';
import FileIncludeWebpackPlugin from 'file-include-webpack-plugin-replace';
import HtmlWebpackPlugin from 'html-webpack-plugin';
import CopyPlugin from "copy-webpack-plugin";

import * as path from 'path';

const srcFolder = "src";
const builFolder = "dist";
const rootFolder = path.basename(path.resolve());

let pugPages = fs.readdirSync(srcFolder).filter(fileName => fileName.endsWith('.pug'))
let htmlPages = [];

if (!pugPages.length) {
    htmlPages = [new FileIncludeWebpackPlugin({
        source: srcFolder,
        htmlBeautifyOptions: {
            "indent-with-tabs": true,
            'indent_size': 3
        },
        replace: [
            { regex: '<link rel="stylesheet" href="css/style.min.css">', to: '' },
            { regex: '../img', to: 'img' },
            { regex: '@img', to: 'img' },
            { regex: 'NEW_PROJECT_NAME', to: rootFolder }
        ],
    })];
}

const paths = {
    src: path.resolve(srcFolder),
    build: path.resolve(builFolder)
}
const config = {
    mode: "development",
    devtool: 'inline-source-map',
    optimization: {
        minimize: false
    },
    entry: [
        `${paths.src}/js/app.js`
    ],
    output: {
        path: `${paths.build}`,
        filename: 'js/app.min.js',
        publicPath: '/'
    },
    devServer: {
        historyApiFallback: true,
        static: paths.build,
        open: true,
        compress: true,
        port: 'auto',
        hot: true,
        host: 'local-ip', // localhost

        // Расскоментировать на слабом ПК
        // (в режиме разработчика, папка с результаттом будет создаваться на диске)
        /*
        devMiddleware: {
            writeToDisk: true,
        },
        */

        watchFiles: [
            `${paths.src}/**/*.html`,
            `${paths.src}/**/*.pug`,
            `${paths.src}/**/*.htm`,
            `${paths.src}/img/**/*.*`,
            `${paths.src}/json/*.*`,
        ],
    },
    module: {
        rules: [
            {
                test: /\.(scss|css)$/,
                exclude: `${paths.src}/fonts`,
                use: [
                    'style-loader',
                    {
                        loader: 'string-replace-loader',
                        options: {
                            search: '@img',
                            replace: '../img',
                            flags: 'g'
                        }
                    }, {
                        loader: 'css-loader',
                        options: {
                            sourceMap: true,
                            importLoaders: 1,
                            modules: false,
                            url: {
                                filter: (url, resourcePath) => {
                                    if (url.includes("img/") || url.includes("fonts/")) {
                                        return false;
                                    }
                                    return true;
                                },
                            },
                        },
                    }, {
                        loader: 'sass-loader',
                        options: {
                            sourceMap: true,
                        }
                    }
                ],
            }, {
                test: /\.pug$/,
                use: [
                    {
                        loader: 'pug-loader'
                    }, {
                        loader: 'string-replace-loader',
                        options: {
                            search: '@img',
                            replace: 'img',
                            flags: 'g'
                        }
                    }
                ]
            }
        ],
    },
    plugins: [
        ...htmlPages,
        ...pugPages.map(pugPage => new HtmlWebpackPlugin({
            minify: false,
            template: `${srcFolder}/${pugPage}`,
            filename: `${pugPage.replace(/\.pug/, '.html')}`
        })),
        new CopyPlugin({
            patterns: [
                {
                    from: `${srcFolder}/img`, to: `img`,
                    noErrorOnMissing: true,
                    force: true
                }, {
                    from: `${srcFolder}/files`, to: `files`,
                    noErrorOnMissing: true,
                    force: true
                }, {
                    from: `${paths.src}/favicon.ico`, to: `./`,
                    noErrorOnMissing: true
                }
            ],
        }),
    ],
    resolve: {
        alias: {
            "@scss": `${paths.src}/scss`,
            "@js": `${paths.src}/js`,
            "@img": `${paths.src}/img`
        },
    },
}
export default config;


---------файл "webpack.prod.js"


import fs from 'fs';
import MiniCssExtractPlugin from 'mini-css-extract-plugin';
import FileIncludeWebpackPlugin from 'file-include-webpack-plugin-replace';
import CopyPlugin from "copy-webpack-plugin";
import HtmlWebpackPlugin from 'html-webpack-plugin';
import TerserPlugin from "terser-webpack-plugin";

import * as path from 'path';

const srcFolder = "src";
const builFolder = "dist";
const rootFolder = path.basename(path.resolve());

let pugPages = fs.readdirSync(srcFolder).filter(fileName => fileName.endsWith('.pug'))
let htmlPages = [];

if (!pugPages.length) {
    htmlPages = [new FileIncludeWebpackPlugin({
        source: srcFolder,
        destination: '../',
        htmlBeautifyOptions: {
            "indent-with-tabs": true,
            'indent_size': 3
        },
        replace: [
            { regex: '../img', to: 'img' },
            { regex: '@img', to: 'img', },
            { regex: 'NEW_PROJECT_NAME', to: rootFolder }
        ],
    })]
}

const paths = {
    src: path.resolve(srcFolder),
    build: path.resolve(builFolder)
}
const config = {
    mode: "production",
    cache: {
        type: 'filesystem'
    },
    optimization: {
        minimizer: [new TerserPlugin({
            extractComments: false,
        })],
    },
    output: {
        path: `${paths.build}`,
        filename: 'app.min.js',
        publicPath: '/',
    },
    module: {
        rules: [
            {
                test: /\.(scss|css)$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    {
                        loader: 'string-replace-loader',
                        options: {
                            search: '@img',
                            replace: '../img',
                            flags: 'g'
                        }
                    }, {
                        loader: 'css-loader',
                        options: {
                            importLoaders: 0,
                            sourceMap: false,
                            modules: false,
                            url: {
                                filter: (url, resourcePath) => {
                                    if (url.includes("img") || url.includes("fonts")) {
                                        return false;
                                    }
                                    return true;
                                },
                            },
                        },
                    },
                    {
                        loader: 'sass-loader',
                        options: {
                            sassOptions: {
                                outputStyle: "expanded",
                            },
                        }
                    },
                ],
            }, {
                test: /\.pug$/,
                use: [
                    {
                        loader: 'pug-loader'
                    }, {
                        loader: 'string-replace-loader',
                        options: {
                            search: '@img',
                            replace: 'img',
                            flags: 'g'
                        }
                    }
                ]
            }
        ],
    },
    plugins: [
        ...htmlPages,
        ...pugPages.map(pugPage => new HtmlWebpackPlugin({
            minify: false,
            template: `${srcFolder}/${pugPage}`,
            filename: `../${pugPage.replace(/\.pug/, '.html')}`
        })),
        new MiniCssExtractPlugin({
            filename: '../css/style.css',
        }),
        new CopyPlugin({
            patterns: [
                {
                    from: `${paths.src}/files`, to: `../files`,
                    noErrorOnMissing: true
                }, {
                    from: `${paths.src}/favicon.ico`, to: `../`,
                    noErrorOnMissing: true
                }
            ],
        })
    ],
    resolve: {
        alias: {
            "@scss": `${paths.src}/scss`,
            "@js": `${paths.src}/js`,
            "@img": `${paths.src}/img`
        },
    },
}
export default config;

---------файл "gulp-settings.js"


// Получаем имя папки проекта
import * as nodePath from 'path';
const rootFolder = nodePath.basename(nodePath.resolve());

// Пути к папке с исходниками и папке с результатом
const buildFolder = `./dist`;
const srcFolder = `./src`;

// Пути к папкам и файлам проекта
export const path = {
    build: {
        html: `${buildFolder}/`,
        js: `${buildFolder}/js/`,
        css: `${buildFolder}/css/`,
        images: `${buildFolder}/img/`,
        fonts: `${buildFolder}/fonts/`,
        files: `${buildFolder}/files/`,
    },
    src: {
        html: `${srcFolder}/*.html`,
        pug: `${srcFolder}/pug/*.pug`,
        js: `${srcFolder}/js/app.js`,
        scss: `${srcFolder}/scss/style.scss`,
        images: `${srcFolder}/img/**/*.{jpg,jpeg,png,gif,webp}`,
        svg: `${srcFolder}/img/**/*.svg`,
        fonts: `${srcFolder}/fonts/*.*`,
        files: `${srcFolder}/files/**/*.*`,
        svgicons: `${srcFolder}/svgicons/*.svg`,
    },
    clean: buildFolder,
    buildFolder: buildFolder,
    rootFolder: rootFolder,
    srcFolder: srcFolder,
    ftp: `` // Путь к нужной папке на удаленном сервере. gulp добавит имя папки проекта автоматически
};

// Настройка FTP соединения
export const configFTP = {
    host: "", // Адрес FTP сервера
    user: "", // Имя пользователя
    password: "", // Пароль
    parallel: 5 // Кол-во одновременных потоков
}



---------файл "json.js"



export const json = () => {
    return app.gulp.src(app.path.src.json)
        .pipe(app.plugins.plumber(
            app.plugins.notify.onError({
                title: "JSON",
                message: "Error: <%= error.message %>"
            }))
        )
        .pipe(app.gulp.dest(app.path.build.json));
}

---------файл "gulp-plugins"


// Импортируем модули
import notify from "gulp-notify";
import newer from "gulp-newer";
import plumber from "gulp-plumber";
import ifPlugin from "gulp-if";
import prettier from "gulp-prettier";
import rename from 'gulp-rename';

// Экспортируем объект
export const plugins = {
    notify,
    if: ifPlugin,
    prettier,
    newer,
    plumber,
    rename
}



-------функция из "script.js"


document.addEventListener("click", function (e) {
    getProducts();
});


async function getProducts () {
    const file = `json/products.json`;
    let response = await fetch(file);
    if(response.ok) {
        let result = await response.json();
        console.log(result);
    } else {
        alert('Ошибка');
    }
}

структура папок


Ответы (0 шт):