Ответы пользователя по тегу JavaScript
  • Версионирование в GULP?

    eternalSt
    @eternalSt
    Доброго времени суток!

    Вот одно из решений этой проблемы
    gulp.task('version', function(){
      return gulp.src(['src/**/*.html','src/**/*.php']) // Добавлен return
        .pipe(replace('{{version}}', Date.now() ))
        .pipe(gulp.dest('dist/'));
    });

    Теперь эта функция будет возвращать поток.

    Я не хочу переписывать, то что уже сказано другими людьми и не раз. Поэтому дам ссылочки для изучения вопроса.

    Офф дока с описанием механизма для gulp 3.9.1 для gulp 4 (Вообще желательно всю прочитать, а не только эту часть)
    Скринкаст по Gulp 4 от Ильи Кантора
    Ответ написан
    1 комментарий
  • Как избавить от кэширования JS?

    eternalSt
    @eternalSt
    Насколько я понимаю это вот этот участок кода
    select_item: function(e, o) {
                console.log("select item: " + e + " --- " + o);
                var t = this,
                    i = $(".msoptionsprice-" + e),
                    n = $("#options-form_" + e + " .subprod-title").html() + ":",
                    s = $("#options-form_" + e).find(".images-set img");
                console.log("pic ---- "), console.log(s);
                var a = s.data("preview-img");
                $(this.options.container).find('[data-preview-img="' + a + '"]').addClass("selected");
                var r = this.options.container + " .pic";
                $("body").on("click", r, function(a) {
                    a.preventDefault();
                    var r = $(this).data("name"),
                        c = $(this).parents(".gal-item").find(".price").html();
                    i.html(c);
                    var l = $(this).css("background-image");
                    l = (l = l.replace("url(", "").replace(/\"/gi, "")).substring(0, l.length - 1), s.attr("src", l);
                    var p = $(this).data("preview-img");
                    s.data("preview-img", p), s.attr("data-preview-img", p), t.sessionStorageOptions.options[o] = {
                        is_gallery: !0,
                        small_pic: l,
                        big_pic: p,
                        parent_id: e,
                        caption: n,
                        value: r,
                        price: c
                    }, t.writeToSessionStorage(), $("#options-form_" + e + " .images-set .label").html(r), console.log("id: " + e + " name: " + o + " val: " + r), t.parametersChange(e, o, r), $(t.options.container + " .pic").removeClass("selected"), $(this).addClass("selected"), $.magnificPopup.close(), $("#hidden-gallery").empty()
                })
            },


    Если так, то проблема достаточно тривиальная.

    Каждый раз при запуске метода select_item регистрируется новый обработчик $("body").on('click', findPic). Получается, сколько раз вызвали функцию select_item столько-же одинаковых обработчиков создастся.

    Что-бы избавится от проблемы, нужно при закрытии popup удалить обработчик $("body").on('click', findPic). методом off.

    $("body").off('click', findPic) // Судя по докам так, хотя сам не проверял

    И проблема должна уйти.

    P.S.
    Это самое быстрое, но не самое хорошее решение проблемы.

    P.P.S Убедительная просьба, в следующий раз, показывай весь контекст проблемы. А то получается проблема была не в этой функции, а в другом месте и что-бы это понять пришлось деобфускатором пройтись по коду, а читать код после обфускации тяжело.
    Ответ написан
    2 комментария
  • Подсвечивать активный li?

    eternalSt
    @eternalSt
    Думаю стоит создать специальное css правило (скажем active) для подсвечивания активного элемента. И используя DOM element.classlist переключать класс active у элемента.

    UPD: судя по всему используется jQuery. Так есть специальный метод для переключения класса toggleClass
    Ответ написан
    Комментировать
  • Как указать путь к файлу через модуль fs?

    eternalSt
    @eternalSt
    Сначала хотел написать большой развёрнуты ответ, но в процессе понял что переписываю офф. доки.
    Поэтому решил дать несколько ссылок да офф. доки. Расписано там всё достаточно хорошо.

    Почитай доку про файловую систему (модуль fs) непосредственно к вопросу относятся разделы (File paths, URL object support, File Descriptors)

    И в дополнение к ответу Евгений почитай доку про path (непосредственно к вопросу относится join, normalize) и по __dirname

    P.S. Читай офф. доки. Многие вопросы сразу пропадут. Если не понимаешь по англ. юзай переводчик и эксперементируй с кодом. Несколько дней и будешь в доках легко ориентироваться, и с нодой по ближе познакомишься. Кстати, есть отличный сайт, где собрано много разных доков. devdocs.io
    Ответ написан
    Комментировать
  • Почему не получается вызвать метод?

    eternalSt
    @eternalSt
    'use strict'
    
    function Constructor(a, b, c){
      this.a = a;
    };
    
    Constructor.prototype.method = function(){
      console.log(`Run method: this.a: ${this.a}`);
    };
    
    function init(n){
      var arr = [];
    
      for(let i = 0; i < n; i++){
        arr.push(new Constructor(i));
      }
    
      arr.forEach(function(item){
        item.method();
      });
    };
    
    init(10);


    Работает как надо.

    Хотя признаться, я не понял зачем тут два цикла?
    Ответ написан
    1 комментарий
  • Можно ли переходить на изучение фреймворков?

    eternalSt
    @eternalSt
    Доброго времени суток!

    Интересным Вы образом поставили вопрос =) А как понять, что вообще нужно заниматься программирование, и именно на js?

    Но всё же попробую ответить на Ваш вопрос.

    Далее я буду применять термин абстракция т.к. React по своей сути не является фреймворком, а например Angular является, ELM вообще как отдельный язык можно считать. Но все они в итоге компилятся в js и решают, в принципе одни и те же задачи, но с разным подходом.

    Моё мнение, по использованию абстракций. Без них будет очень тяжело написать большое приложение, и здесь дело больше не в организации, а в управлении состояниями и производительности в целом. Например, тот же React под капотом имеет Virtual DOM -- это очень мощная штука, неимоверным образом повышающая производительность системы в общем (cейчас Virtual DOM есть не только у React). Redux помогает управлять состояниями приложения.

    Мораль -- абстракция это не что-то сверхъестественное и не что-то что пришло из мира Толкиена, это просто инструмент, и вы уже сами решаете использовать этот инструмент или нет.

    Умение писать на нативном js и понимать код, это конечно безусловно хорошо. Но если Вы хотите остаться в индустрии, то стоит всё время развиваться и соответствовать времени.

    P.S. Если вы смотрите на React, то вам стоит обратить внимание на то что вокрут React есть целая экосистема, дам несколько полезных ссылок

    https://reacttraining.com/react-router/ -- управление роутингом приложения
    https://redux.js.org/ -- управление состоянием (очень полезная штука, которая в свою очередь тоже имеет очень большую экосистему)
    https://reactjs.org/ -- и конечно офф сайт, основная инфа про React лежит здесь
    Ответ написан
    Комментировать
  • Как сделать обычный throw вместо unhandledRejection в NodeJS?

    eternalSt
    @eternalSt
    Ответ на Ваш вопрос есть в офф документации
    Там же описана причина возникновения события "unhandledRejection".

    Вообще есть несколько решений этой задачи, например как это предложили Сергей и Владлен Хеллсайт здесь же в ответа.

    Другие варианты:
    let go = async () => {
        throw new Error('Some Error');
      }
    
    // можно выловить ошибку в другой async функции
      (async () => {
        try{
          await go()
        }
        catch(error){
          console.error(error); // напечатать лог
          process.exit(1); // вернуть код завершения отличный от нуля
        }
      })()
    
    // Или повесить catch на функцию `go` , это тоже сработает
      go().catch(error => { 
          console.error(error); // напечатать лог
          process.exit(1); // вернуть код завершения отличный от нуля
      })


    P.S. Если задать вопрос: "Какой шаблон лучше использовать?". То тут мнения расходятся. Как по мне, так нужно стараться всегда отлавливать ошибки, если это не возможно -- использовать process.on('unhandledRejection')
    Ответ написан
    Комментировать