Использование webjars с Javalin и Vue

#bootstrap-vue #javalin

#bootstrap-vue #javalin

Вопрос:

Я знаю, что Javalin поддерживает Vue, и я использую его без проблем. Его легко настроить, мне нужно было только вызвать config.enableWebjars() , а использование Vue довольно простое и простое. Тем не менее, я хотел бы использовать другие инструменты, которые не глубоко интегрированы с Javalin. А именно, я хотел бы использовать bootstrap-vue для компонентов высокого уровня. Обычно, когда я использую его через npm и ручную настройку, также просто добавить поддержку в Vue:

 import Vue from 'vue'
import { BootstrapVue } from 'bootstrap-vue'

// Install BootstrapVue
Vue.use(BootstrapVue)
  

Однако это не может быть напрямую переведено на поддержку Javalin Vue, потому что, если я добавлю вышеуказанные строки на верхний уровень layout.html :

 <script>
    import { BootstrapVue } from 'bootstrap-vue'

    var vue = new Vue({el: "#main-vue"});
    Vue.filter("numFormat", function(value) {
        if (value == undefined) return ""
        else return value.toString().replace(/(d)(?=(d{3}) (?!d))/g, '$1,')
    });
    Vue.config.devtools = true
    Vue.use(BootstrapVue)

</script>
  

Я получу сообщение об ошибке: Uncaught SyntaxError: import declarations may only appear at top level of a module .

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

Ответ №1:

Это не совсем ответ на мой первоначальный вопрос (с использованием webjars), но решает проблему так просто, что я принимаю это как обходной путь.

«добавьте bootstrap-vue через CDN, добавив (например) https://unpkg.com/bootstrap-vue@2.0.0-rc.11/dist/bootstrap-vue.min.js в качестве тега к вашему layout.html . Как только вы это сделаете, все компоненты bootstrap vue будут автоматически импортированы, и вы сможете использовать их как Привет, мир! внутри ваших компонентов «.

Ответ №2:

я работал с vue и Javalin в течение короткого времени, но я, наконец, понял, что, когда вы работаете с Vue с сервером Javalin, вы подчиняетесь правилам ES6, поэтому для импорта модуля с расширением .js вам нужно указать, что вы работаете с модулями, что-то вроде <script type="module">//Imports and code</script> . Теперь, если вам нужно импортировать из файла .vue, вы можете использовать http-vue-loader, вы можете получить зависимость maven здесь: https://mvnrepository.com/artifact/org.webjars.npm/http-vue-loader , вам нужно только заменить import { component } from 'module' на 'name of component':httpVueLoader('module route') . Небольшой пример, который работает для меня при импорте из файла js:

 <script type="module">
  import BarExample from '/componentsjs/BarExample.js'
  import LineExample from '/componentsjs/LineExample.js'
    Vue.component("charts-page", {
        template: "#charts-page",
        components: {
              BarExample,
              LineExample,
            },
            data: () => ({
                dataPoints: null,
                height: 20,
                labelsBar: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
                dataBar: [40, 20, 12, 39, 11, 40, 39, 80, 40, 20, 12, 11]
              }
            ),
    });
</script>  

И пример импорта файлов .vue:

 <script type="module">
Vue.component("main-component-page", {
    template: "#main-component-page",
    components: {
        'app-header': httpVueLoader('/component/header.vue'),
        'app-ninjas': httpVueLoader('/component/ninjas.vue'),
        'app-footer': httpVueLoader('/component/footer.vue')
    },
});
</script>