• Vuetify с NuxtJS - как можно подключить только нужные компоненты?

    @golentor
    У вас уже неправильный код. См. новую документацию

    // src/plugins/vuetify.js
    
    // НАДО ТАК
    import Vuetify from 'vuetify/lib/framework'
    
    // НЕВЕРНО
    import Vuetify, { VRow } from 'vuetify/lib/framework'
    
    export default new Vuetify()


    Ну и компоненты Вы используете динамически. Но если нужен миниммализм, есть такая фишка vuetify minify.css

    Ещё я случайно наткнулся на vuesax аналог vuetify. Там так можно

    Or use individual components:
    
    import Vue from 'vue'
    import { vsButton, vsSelect, vsPopup } from 'vuesax'
    import 'vuesax/dist/vuesax.css'
    
    Vue.use(vsButton)
    Vue.use(vsSelect)
    Vue.use(vsPopup)
    Ответ написан
    Комментировать
  • Как в git перестать отслеживать изменения в таком-то файле, НЕ добавляя его в .gitignore (т.е. сохраняя в репозитории исходную версию)?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    На примере файла .env:

    Имеется файл с переменными среды, который используется приложением и содержит некие данные, которых не должно быть в репе. Тогда пацаны делают так:
    1. Создают в репе файл .env.dist, который после клонирования репы просто копируют и переименовывают в .env
    2. Пишут в нём образец конфига, но без критичных данных
    3. Создают локально файл .env
    4. Добавляют .env в .gitignore

    Всё ))
    Ответ написан
    Комментировать
  • Как правильно использовать интерцепторы в axios?

    owl1n
    @owl1n
    fullstack developer
    Покажу немного практик, как интерцепторы упрощают жизнь мне, да и многим, в целом.
    Здесь и далее покажу именно использование интерцепторов при работе с авторизацией по JWT (токены).

    1) Подстановка хедера авторизации

    const createSetAuthInterceptor = options => config => {
      if (options.access) {
        config.headers.Authorization = options.access;
      } else {
        delete config.headers.Authorization;
      }
      return config;
    };
    
    const setAuthCb = createSetAuthInterceptor(store.state.auth);
    axios.interceptors.request.use(setAuthCb);


    Здесь мы проверям наличие доступа из стора, а точнее, наличие токена. Далее, подставляем, либо удаляем заголовок.

    2) Следующая практика, это обновление токена (то, о чем вы спросили в комментарии, при окончании сессии и т.д.)

    let refreshTokenPromise;
    
    const createUpdateAuthInterceptor = (store, http) => async error => {
      const message = get(error, 'response.data.message');
      if (!['Token expired', 'Invalid token'].includes(message)) {
        return Promise.reject(error);
      }
    
      if (!refreshTokenPromise) {
        refreshTokenPromise = store.dispatch('refreshToken');
      }
    
      await refreshTokenPromise;
      refreshTokenPromise = null;
    
      return http(error.config);
    };
    
    const updateAuthCb = createUpdateAuthInterceptor(store, axios);
    axios.interceptors.response.use(null, updateAuthCb);


    Здесь мы можем видеть, что при каждом ответе проверяем наличие ошибок и если ошибка соответствует ошибке с токеном, то отправляем обновлять токен и далее снова отправляем тот же самый запрос, который к нам вернулся с ошибкой. Тут грамотно будет проверять не само сообщение об ошибке, а код ответа (401 и т.д.), но тут используется такое решение уже из за специфики бэка.

    В этом же решение, вместо обновления токена, можно отправлять юзера авторизовываться самому, на страницу авторизации. Для этого, конечно же, стоит передавать не экземпляр store, а экземляр роутера, чтобы редиректить юзера. Надеюсь, помог и хоть как то наглядно показал способы применения :)
    Ответ написан
    1 комментарий
  • WebStorm - почему глаза устают сильнее чем с VSCode?

    Чаще всего проблема в шрифтах. Поищи шрифт типа Monaco Bold или Fira Code Medium
    Ответ написан
    Комментировать
  • Как запустить eslint в консоли, чтобы сработали правила для продакшена?

    notiv-nt
    @notiv-nt
    Как ваше ничего? Да, моё тоже
    https://www.npmjs.com/package/cross-env
    cross-env NODE_ENV=production npm run lint
    Ответ написан
    Комментировать
  • WebStorm - почему глаза устают сильнее чем с VSCode?

    Sergey_Evsyukov
    @Sergey_Evsyukov
    Бот
    Я переходил с VS Code на PHP Storm.
    И тоже столкнулся с проблемой дискомфорта зрительного. Причину исправил изменением размера шрифта и расстояния между буквами и строками. Благо, IDE данная на эти настройки довольно богата.

    Ещё пару советов:

    Используйте темную тему в темном помещении. Потому что в дневное время будет наоборот нагрузка на глаза, вместо расслабления. Если у Вас ещё монитор не обладает высокой яркостью, то это очень сильно ощутимо. Попробуйте вовсе отказаться от темной темы. И посмотреть на ощущения при работе со светлой.

    Ещё один момент, который меня тоже напрягал всегда при использовании темной темы. Днём это не так ощущается, но в темное время суток прям раздражает. Когда верстаешь, приходится прыгать от редактора к браузеру и обратно. И постоянно происходит смена темного на светлое. Спустя час работы глаза чувствуют усталость от этого.

    Старайтесь работать либо днём, либо при хорошем освещении. И перейдите при этом на светлую тему. Можете попробовать установить фильтр синего. Очень полезная штука, хоть и цвет искажает при этом. Но если работаете с макета, то Вам это не важно.

    Здоровье глаз должно быть в приоритете на мой взгляд.
    Ответ написан
    Комментировать
  • VSCode тормозит во время работы с некрупным проектом. Что может помочь?

    Vlad_IT
    @Vlad_IT
    Front-end разработчик
    Попробуйте нажать Ctrl+Shift+I (Option+Command+I), откроется стандартный хромовый девтулз, и посмотрите во вкладке "Console", возможно там сыпятся ошибки, оставьте консоль открытой, и попробуйте сделать в VSCode те действия, которые тормозят. Можно также попробовать отключить расширения, и включать по одному, пока не начнутся тормоза.
    Но такие тормоза это не норма.
    Ответ написан
    Комментировать
  • TS7016: Could not find a declaration file for module '../../../secret/firebaseConfig.js'. Как ее можно исправить?

    @disappearedstar
    Фронтенд-разработчик
    Смените файлу с конфигом расширение на .ts
    Ответ написан
    Комментировать
  • Как совместить try...catch... для async/await и Promise.catch()?

    если хотите получить ошибку в компоненте, модифицируйте сервис, чтобы он возвращал объект {data, error} и в компоненте смотрите что пришло, ошибка или данные
    import axios from 'axios';
    
    const posts = {
        getPosts(){
            return axios
                .get('https://jsonplaceholder.typicode.com/p2osts/1')
                .then(r => {data: r.data})
                .catch(error=> {
                  handleError(error, 'posts.getPosts()')
                  return {error}
                })
        }
    }


    import axios from 'axios';
    
    const posts = {
        getPosts(){
            return axios
                .get('https://jsonplaceholder.typicode.com/p2osts/1')
                .then(r => r.data)
                .catch(error=> {
                  handleError(error, 'posts.getPosts()')
                  throw err;
                })
        }
    }
    Ответ написан
    1 комментарий
  • Подключаемся к VueJS проекту с большой кодовой базой. Какие есть инструменты для "code visalisation" чтобы ускорить изучение чужого кода командой?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Годами хотел нечто такое. Пробовал всякое, и свои инструменты делал. Ничего не давало нужного результата - простоты понимания сложных систем.

    А потом вдруг как-то понял что большой проект в виде картинки - впечатляющее, но крайне сложное в усвоении и использование с практической точки зрения зрелище. А если начинать там интерактив - свернуть, пройти по ссылке, посмотреть на какую-то часть, то навигация по коду на порядки лучше.
    А для маленьких проектов, на которых все демки у таких инструментов - оно и не нужно.

    В общем самое лучше средство визуализации - все еще листок с карандашом. Супер адаптивно, супер гибко, и ровно на том уровне абстракции/детализации который вам нужен.
    Ответ написан
    Комментировать
  • Эффективность работы верстальщиков - как реализовать удобный live reload при работе с PerfectPixel?

    xPomaHx
    @xPomaHx
    1vs9
    Пользуюсь своим накладывателем картинки, имхо удобнее чем расширение, и настраивается вообще как угодно.
    spoiler
    <input type="checkbox" name="" id="" class="pp">
    <img src="pp.png" alt="">
    <style>
        .pp {
            position: fixed;
            z-index: 9999999;
            top: 20px;
            left: 20px;
        }
    
        .pp+img {
            display: none;
        }
    
        .pp:checked+img {
            display: block;
            position: absolute;
            top: 50px;
            left: -37px;
            right: 0;
            margin: auto;
            z-index: 999999;
            opacity: 0.5;
            -webkit-filter: invert(100%);
        }
    </style>


    кидаю обычно после закрывающегося html чтобы потом не забыть.
    Ответ написан
    Комментировать
  • Эффективность работы верстальщиков - как реализовать удобный live reload при работе с PerfectPixel?

    SkiperX
    @SkiperX Куратор тега CSS
    У расширений в хроме есть параметры, в пп там куча всего, и он умеет запоминать свое состояние. Еще мелкие изменения можно инжектить без перезагрузки. Через тот же browsersync.

    И пп только для новичков подходит. В работе это зло.
    Ответ написан
    1 комментарий
  • Как использовать mapActions с помощью этого удобного способа?

    bootd
    @bootd
    Гугли и ты откроешь врата знаний!
    ...mapActions({
    setUser: 'user/setUser'
    }),
    Ответ написан
    1 комментарий
  • Какой необходимый уровень знаний для Junior Angular 4+ разработчика?

    mazhekin
    @mazhekin
    Frontend, Backend Web Developer
    Лучше всего не задавая вопросов, попросить показать портфолио, и посмотреть вместе исходники, поспрашивая параллельно, что и как претендент там делал и сколько времени на это потратил. Если нет проектов в портфолио, то сделайте и показывайте проект, в котором просто будет логин/логаут, регистрация, вход через соц. сеть (типа вконтакте), восстановление пароля. Если человек может сделать такой проект, как правило с остальными задачами проблем не будет. Потом дать небольшое задание на день-два по специфике работодателя и выяснить исполнительность. Вопросы, списки вопросов и т.п. это пустая болтовня, ни работодатель, ни претендент не поймет подходит ли человек на позицию. В случае невыполненной работы(проекта) работодатель потеряет деньги, а претендент время, квалификацию, репутацию, нервы и самоуважение. Человека нанимают не на вопросы отвечать, а продукты делать.
    Ответ написан
    Комментировать
  • Что важно знать в TypeScript для быстрого старта c Angular4+?

    search
    @search
    мама говорит что я особенный
    Все эти знания принесут пользу несомненно, но они не критичны. Ангуляр весьма органично дружит с тайпскриптом и не требует никакой экзотики. С перечисленными темами можно ознакомиться по ходу пьесы если будет интересно. К вашему списку можно добавтьб дженерики (Generics), они часто используются в ангуляре и желательно понимать что это такое.

    Что нереально важно для комфортной работы с ангуляром, так это RxJS. Rx представляет декларативный подход к программированию и на первых парах полностью выносит мозг. Правда потом не знаешь как без него жить дальше. Непонимание RxJS - это гарантия провала и обиды на фреймворк. Вот это видео может немного пролить свет https://www.youtube.com/watch?v=3LKMwkuK0ZE . Не теряйте времени зря и разберитесь в теме заранее, чтоб потом не жалеть о напрасно написанном коде.

    Еще, как и большинство фреймворков, ангуляр не поставляет менеджер состояния по умолчанию. Неокрепшие умы хранят глобальное состояние прямо в сервисах. Что мало чем отличается от использования глобальных переменных. Но для глобальных состояний существует NgRx. Это Redux на стероидах. Опять же, прийдётся с этим разобраться для того чтоб через год не оказаться у разбитого корыта.
    Ответ написан
    4 комментария
  • Vuex для каталога с корзиной - как лучше реализовать такое решение?

    0xD34F
    @0xD34F Куратор тега Vue.js
    получать данные для корзины - в actions, через Promise.all по id вытаскивая данные для каждого товара?

    В смысле - хранить в cartItems только id (ну ещё количество и цену), а при каждом заходе пользователя в корзину подтягивать остальные данные (название/производитель/гарантия/...)? Во-первых, что ещё за Promise.all - собираетесь ради каждого товара выполнять отдельный запрос? Так дела не делаются - передавать на сервер следует массив id, запрос должен быть один. Во-вторых - получится, что у вас есть в хранилище массив id, а в компоненте корзины локально лежат полные данные товаров. На мой взгляд - как-то сложновато, при манипуляции данными cartItems из компонента корзины последний придётся вручную поддерживать в актуальном состоянии - watch на cartItems, отфильтровывание из локального массива удалённых элементов, копирование количества существующих.

    Короче, я при добавлении товара в корзину просто полностью бы копировал в cartItems данные из products.
    Ответ написан
    2 комментария