Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.05.2021, 01:23
Новичок на форуме
Отправить личное сообщение для Vladikslav Посмотреть профиль Найти все сообщения от Vladikslav
 
Регистрация: 10.05.2013
Сообщений: 9

Gulp + Webpack, кэширование точек входа
Прикрутил к галпу webpack через webpack-stream.
Всё работает, однако при изменении одного js-файла билдятся все.
В общем, я написал вот такую вот функцию для таска:

const devMode = true,
    prodMode = !devMode;
const path.src.js = ['./assets/src/js/main.js', './assets/src/js/rest.js'];
/* ... */
const cached = require('gulp-cached');
const webpackStream = require('webpack-stream');
const TerserPlugin = require("terser-webpack-plugin");
/* ... */
function js_build() {

    let webpackConf = {
        mode: `${(devMode === true) ? 'development' : 'production'}`, // current mode for webpack
        output: {
            filename: `[name].js`,  // the same name as the source
            sourceMapFilename: '[name].map'
        },
        module: {
            rules: [
                {
                    test: /\.(js)$/,    // get all js-files
                    exclude: /(node_modules)/, // exclude development modules folder
                    loader: 'babel-loader', // convert ES6 into a backwards compatible version of JS in older browsers
                    query: {
                        presets: ['@babel/env'] // use babel preset
                    }
                },
            ]
        },
        optimization: {
            minimize: true,
            minimizer: [new TerserPlugin()],
        }
    };

    // convert config array into entry property for Webpack
    let fileName = null;
    let entryObj = {};
    path.src.js.map((filePath) => {
      fileName = filePath.split('/').pop().split('.').slice(0, -1).join('.');
      entryObj[fileName] = filePath;
    });

    // add converted entry property to Webpack    
    webpackConf.entry = entryObj;
    // cache the generated webpack modules and chunks to improve build speed
    webpackConf.cache = (devMode === true) ? true : false;

    return gulp.src(path.src.js)
        .pipe(cached('js_building'))
        .pipe(webpackStream(webpackConf)).on('error', function handleError() {
            this.emit('end')
        })
        .pipe(gulp.dest(path.build.js))  // build js
        .pipe(rename({ suffix: '.min' })) // add suffix to the filename
        .pipe(gulp.dest(path.build.js)) // build final min js
        .pipe(browserSync.reload({ stream: true })); // browser-sync reload
}
exports.js_build = js_build;


В общем, как сделать так, чтобы при внесении измений в файл конкретной точки входа, к примеру, в файл './assets/src/js/rest.js', билдился только этот аутпут?!
Из примера видно, что если прописать в конфиге вебпака свойство cache: true, то всё равно билдятся все файлы!
Может быть плагин 'gulp-cached' нужно как-то прикрутить к перебираемому массиву js-файлов, х.з.
Может кто-то заморачивался?
Ответить с цитированием
  #2 (permalink)  
Старый 25.05.2021, 00:56
Аватар для Kiano
Интересующийся
Отправить личное сообщение для Kiano Посмотреть профиль Найти все сообщения от Kiano
 
Регистрация: 09.06.2014
Сообщений: 28

C webpack не работал, но что-то мне подсказывает что в 14 строке нужно более точное правило задать, там же указано, что все .js
Ответить с цитированием
  #3 (permalink)  
Старый 26.05.2021, 13:46
Новичок на форуме
Отправить личное сообщение для Vladikslav Посмотреть профиль Найти все сообщения от Vladikslav
 
Регистрация: 10.05.2013
Сообщений: 9

Сообщение от Kiano Посмотреть сообщение
C webpack не работал, но что-то мне подсказывает что в 14 строке нужно более точное правило задать, там же указано, что все .js
Нет, это свойство output. Это совсем другое.

Цитата:
The top-level output key contains set of options instructing webpack on how and where it should output your bundles, assets and anything else you bundle or load with webpack.
output.auxiliaryComment
А вот по поводу filename: '[name].bundle.js' – https://webpack.js.org/configuration...outputfilename
Цитата:
...when creating multiple bundles via more than one entry point, code splitting, or various plugins, you should use one of the following substitutions to give each bundle a unique name...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите новичку с webpack AndriiS Сборка проекта, утилиты 1 13.03.2019 06:39
WebPack если уже установлен Gulp MC-XOBAHCK Сборка проекта, утилиты 3 08.08.2018 12:17
Миграция на Webpack 2 c Gulp yakutoc Сборка проекта, утилиты 4 03.02.2017 15:16