За последние 24 часа нас посетили 22620 программистов и 1035 роботов. Сейчас ищут 622 программиста ...

Как настроить import {...} from '...' в js Laravel-проекте

Тема в разделе "Laravel", создана пользователем Сереганек, 25 июн 2022.

  1. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    Есть проект на "laravel/framework": "^6.2", где админка работает на web-роутах, blade, js+ajax. Все это добро мягко говоря устарело. Технической возможности обновить Ларавель, подключить vue.js, typescript либо что-то еще глобально пока нет. Но можно рефакторить отдельные сервисы, включая джаваскрипт. Сейчас джаваскрипт, это одноуровневая пачка файлов с функциями, которые собираются вебпаком в один скрипт. Хочу подвести эти скрипты максимально к подобию ООП, использовать классы, enum и т.п..., разделить скрипты по функциональному признаку, а не по принципу на какой странице они используются. Подключить axios. В общем все, что можно выжать из сырого js (с перспективой перехода на typescript).

    Возникла проблема при использовании export/import. Создал файл routes.js, который содержит несколько экспортов:

    Код (Javascript):
    1. export const Method = {
    2.     get: 'GET',
    3.     put: 'PUT',
    4.     post: 'POST',
    5.     delete: 'DELETE'
    6. }
    Код (Javascript):
    1. export function getWebRoute(alias, method, queryParams)
    В другом скрипте SendWebRoute.js пытаюсь импортировать:

    Код (Javascript):
    1. import {Method} from 'routes'
    2. console.log(Method.get)
    Скрипт SendWebRoute.js подключаю во вьюхе так:

    HTML:
    1. <script src="{{ asset('js/services/SendWebRoute.js') }}"></script>
    2.  
    На странице в консоли получаю ошибку:

    Uncaught SyntaxError: Cannot use import statement outside a module

    Решения пишут типа в package.json добавить
    type: "module"
    Также предлагали сделать следующее:
    HTML:
    1.     <script type="module" src="{{ asset('js/services/SendWebRoute.js') }}"></script>
    2.  
    Также пробовал прописывать module.exports вместо export в routes.js.

    Ничего из этого не помогло. Были еще ошибки типа:

    Cannot use import statement outside a module
    Unexpected token export


    Кто может подсказать как правильно настроить старый Ларавель, чтобы я мог делать экспорт/импорт как это делается например в Vue.js.
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.551
    Симпатии:
    1.754
    6.2 всё это поддерживает, это последняя LTS-ка же. Я ещё с 5 vue.js использовал. Почитайте про Laravel Mix.

    Что-то я вообще ничего не понял. Причём тут JS, и get, post и т.п. Вы же не на NodeJS работаете

    С type='module' должно было работать, по идее, но я не врубаюсь, что вы пытаетесь сделать



    Ничего из этого не устарело. SPA ради SPA делать - такое себе, если админка выполняет свои функции, я бы оставил. Тем более админка, которую только админы и видят.
     
  3. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    Да это просто пример енама, который я экспортирую из одного скрипта в другой. Нет разницы что я там напишу - экспорт не работает.

    А где его прописать нужно, в html при подключении скрипта или в package.json?

    Ну как сказать, сотни функций в одном скрипте. Что-то там исправить, это каждый раз дебаг на пару часов. И речь не о SPA сейчас, а о том, чтобы не используя другие технологии, немного все же сделать код более читабельным.

    Это не то, что я хочу. Микс ведь просто соберет все скрипты в один большой скрипт. А я хочу явно в скриптах прописывать импорты нужных мне енамов, функций, классов
    Код (Javascript):
    1. import {Method} from 'routes'
    2. console.log(Method.get)
     
    #3 Сереганек, 26 июн 2022
    Последнее редактирование: 26 июн 2022
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.551
    Симпатии:
    1.754
    upload_2022-6-26_9-58-37.png
    upload_2022-6-26_9-59-41.png
    У меня так работает. Это из рабочего проекта
    --- Добавлено ---
    Главное, чтоб браузер поддерживал
     
  5. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    Так может у вас vue.js, полноценно настроен, и все что к нему полагается - router, nuxt, или что-то в этом роде.
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.551
    Симпатии:
    1.754
    Не, в этом проекте нету ничего. Видно же по коду. Чистый js на фронте, либы только для работы с блокчейном. Микс тоже не включал