Шаблон Vue или функция рендеринга еще не определены. Я не использую ни один из них?

Это мой главный файл javascript:

import Vue from 'vue'

new Vue({
  el: '#app'
});

Мой HTML файл:

<body>
    <div id="app"></div>

    <script src="{{ mix('/js/app.js') }}"></script>
</body>

Конфигурация веб-пакета Vue.js с помощью сборки времени выполнения:

alias: {
    'vue$': 'vue/dist/vue.runtime.common.js'
}

Я все еще получаю эту известную ошибку:

[Vue warn]: Не удалось установить компонент: шаблон или функция рендеринга не определены. (найденный в корневом экземпляре)

Почему, когда у меня нет ни одной вещи внутри моего #app div, где я монтирую Vue, я все равно получаю ошибку render/template? Он говорит, что found in root но ничего не найти, потому что у него даже нет контента?

Как я могу подойти, если это не сработает?

Редактировать:

Я пробовал это, как будто это работает:

new Vue(App).$mount('#app');

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

Тем не менее это чрезвычайно странное сообщение об ошибке, особенно когда у меня весь мой #app div опустел.

Надеюсь, кто-то может подтвердить мои мысли.

Ответы

Ответ 1

Причина, по которой вы получаете эту ошибку, заключается в том, что вы используете сборку во время выполнения, которая не поддерживает шаблоны в файлах HTML, как показано здесь vuejs.org

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

Ответ 2

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

Vue.component('yourComponentsName', require('./components/yourComponentsName.vue').default);  

у меня это сработало.. спасибо @Justin MacArthur

Ответ 3

В моем случае я импортировал свой компонент (в маршрутизаторе) как:

import bsw from 'common-mod/src/components/webcommon/webcommon'

Это просто решено, если я изменил это на

import bsw from 'common-mod/src/components/webcommon/webcommon.vue'

Ответ 4

Если кто-то другой продолжает получать ту же ошибку. Просто добавьте один дополнительный div в свой шаблон компонента.

Как говорится в документации:

Шаблон компонента должен содержать ровно один корневой элемент

Проверьте этот простой пример:

 import yourComponent from '{path to component}'
    export default {
        components: {
            yourComponent
        },
}

 // Child component
 <template>
     <div> This is the one! </div>
 </template>

Ответ 5

В моем случае я получал сообщение об ошибке, потому что я обновил Laravel Mix версии 2 до 5.

В Laravel Mix Version 2 компоненты vue импортируются следующим образом:

Vue.component(
    'example-component', 
    require('./components/ExampleComponent.vue')
);

В версии 5 Laravel Mix вы должны импортировать компоненты следующим образом:

import ExampleComponent from './components/ExampleComponent.vue';

Vue.component('example-component', ExampleComponent);

Вот документация: https://laravel-mix.com/docs/5.0/upgrade

Чтобы улучшить производительность вашего приложения, вы можете лениво загружать компоненты следующим образом:

Vue.component("ExampleComponent", () => import("./components/ExampleComponent"));

Ответ 6

Я использую Typescript с vue-property-decorator, и что случилось со мной, так это то, что моя IDE автоматически заполнила "MyComponent.vue.js" вместо "MyComponent.vue". Это дало мне эту ошибку.

Кажется, что мораль этой истории в том, что если вы получаете эту ошибку и используете какой-либо отдельный компонент установки файла, проверьте свой импорт в маршрутизаторе.

Ответ 7

Я лично столкнулся с той же ошибкой. Ни одно из вышеперечисленных решений не помогло мне.

Фактически, мой компонент выглядит следующим образом (в файле my-component.js):

Vue.component('my-component', {
    data() {
        return {
            ...
        }
    },
    props: {
        ...
    },
    template:'
        <div>
            ...
        </div>
    '
});

И я импортировал это следующим образом:

import MyComponent from '{path-to-folder}/my-component';

Vue.component('parent_component', {
    components: {
        MyComponent
    }
});

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

const MyComponent = Vue.component('my-component', {
    data() {
        return {
            ...
        }
    },
    props: {
        ...
    },
    template:'
        <div>
            ...
        </div>
    '
});

export default MyComponent;

Это может показаться очевидным, но, как я уже сказал выше, он работает в одном другом компоненте без этого, поэтому я не мог понять, почему, но, по крайней мере, сейчас это работает везде.

Ответ 8

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

Ответ 9

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

У меня это изначально

import Vue from 'vue';
import VueRouter from 'vue-router';
import Home from './com/Home.vue';

Vue.use(VueRouter);

Vue.router = new VueRouter({
    mode: 'history',
    routes: [
        {
            path: '/',
            name: 'home',
            component: Home
        },
    ]
});

Тогда в Home.vue у меня есть:

<h1>Hello Vue</h1>

Отсюда и ошибка:

Failed to mount component: template or render function not defined.

found in

---> <Home> at resources/js/com/Home.vue
       <Root>

Вложение в элемент исправило ошибку:

<template>
   <h1>Hello Vue</h1>
</template>

Ответ 10

В моем случае я использовал импорт по умолчанию:

import VueAutosuggest from 'vue-autosuggest';

Использование именованного импорта исправило это: import {VueAutosuggest} from 'vue-autosuggest';

Ответ 11

Примерно так должно решить проблему..

Vue.component(
'example-component', 
require('./components/ExampleComponent.vue').default);

Ответ 12

При использовании с сборником рассказов и набором текста мне пришлось добавить

.storybook/webpack.config.js

const path = require('path');

module.exports = async ({ config, mode }) => {

    config.module.rules.push({
        test: /\.ts$/,
        exclude: /node_modules/,
        use: [
            {
                loader: 'ts-loader',
                options: {
                    appendTsSuffixTo: [/\.vue$/],
                    transpileOnly: true
                },
            }
        ],
    });

    return config;
};