无法安装组件:模板或渲染函数未定义:Vue动态导入,延迟加载

时间:2018-03-27 15:59:23

标签: typescript webpack vue.js

我收到了以下错误。还有许多其他“视觉上”类似的问题。但我无法弄清楚那些。我正在使用webpack。此模板是从microsoft的javascriptservices模板生成的。我已修改它们以使它们与动态模板导入一起使用。

[Vue warn]: Failed to mount component: template or render function not defined.

vendor.js?v=MxNIG8b0Wz6QtAfWhyA0-4CCwZshMscBGmtIBXxKshw:13856     

found in 

---> <MenuComponent>
       <T> at ClientApp\components\app\app.vue.html
         <Root>
warn @ vendor.js?v=MxNIG8b0Wz6QtAfWhyA0-4CCwZshMscBGmtIBXxKshw:13856

我的boot.ts如下所示。

import './css/site.css';
import 'bootstrap';
import Vue from 'vue';
import VueRouter from 'vue-router';
Vue.use(VueRouter);

const Counter = () => import('./components/counter/counter');

const routes = [
    { path: '/', component:  require('./components/home/home.vue.html').default },
    { path: '/counter', component: Counter }
];

new Vue({
    el: '#app-root',
    router: new VueRouter({ mode: 'history', routes: routes }),
    render: h => h(require('./components/app/app.vue.html').default)
});

我的app.vue.html如下:

<template>
    <div id='app-root' class="container-fluid">
        <div class="row">
            <div class="col-sm-3">
                <menu-component />
            </div>
            <div class="col-sm-9">
                <router-view></router-view>
            </div>
        </div>
    </div>
</template>

<script src="./app.ts"></script>

我的app.ts如下:

import Vue from 'vue';
import { Component } from 'vue-property-decorator';

@Component({
    components: {
        MenuComponent: require('../navmenu/navmenu.vue.html')
    }
})
export default class AppComponent extends Vue {
}

[增订] 伙计们。现在我通过以下更改解决了这个问题。

需要之后,有一个地方缺少 .default 。那是在boot.ts

也代替以下:

import('./components/counter/counter')

我必须在下面写一下:

import('./components/counter/counter').then(m => m.default)

现在问题是问题的原因吗? 我有 “vue”:“^ 2.5.16”, “vue-loader”:“^ 14.2.2”, “vue-router”:“^ 3.0.1”。

以下链接与这些版本相同,如果我没有错误,则不需要这些默认相关更改。

https://github.com/vuejs/vue-loader/releases/tag/v13.0.0

1 个答案:

答案 0 :(得分:2)

  

而不是下面:

import('./components/counter/counter')
     

我必须在下面写一下:

import('./components/counter/counter').then(m => m.default)
     

现在问题是问题的原因吗?

     

我有

     
      
  • “vue”:“^ 2.5.16”,
  •   
  • “vue-loader”:“^ 14.2.2”,
  •   
  • “vue-router”:“^ 3.0.1”。
  •   

新版本中.default选项导致esModule true.default

您可以使用esModule: false,也可以在vue-loader选项中明确使用 module: { rules: [ { test: /\.vue$/, loader: 'vue-loader', options: { loaders: { }, esModule: false // example of setting to false } }, 来关闭新行为。

示例:

trim($images,',')