vue 2.0无法安装组件:未定义模板或渲染功能

时间:2016-10-16 14:12:52

标签: laravel vue.js laravel-elixir

我正在使用Laravel Vue设置并拉入Laravel Elixir,Webpack和laravel-elixir-vue-2包。

我已经查看了其他几个SO问题,我知道这通常是一个问题,没有引用独立版本的vue.js

但是,laravel-elixir-vue-2软件包将vue归为独立版本,因此可以从.vue文件加载模板。不过,我每次都会收到此错误:

[Vue:Warn] vue 2.0 Failed to mount component: template or render function not defined. (found in component <top> at ../resources/assets/js/components/top.vue)

我可以看到vue.js是从控制台中的vue / dist / vue.js?0598:2611中提取的。

有人能看到我错过的东西吗?

app.js

import Vue from 'vue'
import top from './components/top.vue'

new Vue({
el: '#app',
components: { top }
})

//I've also tried this: 

// new Vue({
//  components: {
//    top
//  },
// render: h => h(top),
// }).$mount('#app')

top.vue

<template>
   <div class="top">
     <p>hi</p>
   </div>
</template>
<script>
 export default {};
</script>

index.blade.php

<div>
   <div id="app">
<top></top>
   </div>
</div>
{!! HTML::script('js/app.js') !!}

的package.json

{
  "private": true,
  "scripts": {
  "prod": "gulp --production",
  "dev": "gulp watch"
},
"devDependencies": {
   "bootstrap-sass": "^3.3.0",
   "gulp": "^3.9.1",
   "laravel-elixir": "^6.0.0-9",
  "laravel-elixir-vue-2": "^0.2.0",
  "laravel-elixir-webpack-official": "^1.0.2"
  }
 }

gulp.js

var elixir = require('laravel-elixir');
elixir.config.sourcemaps = true;
require('laravel-elixir-vue-2');

elixir(function(mix) {
  mix.webpack('app.js', 'public/assets/js');
});

修改:更新

更改gulp.js语法修复了我的错误。

var elixir = require('laravel-elixir')
require('laravel-elixir-vue-2')

elixir(mix => {

  mix.webpack('app.js');

  mix.styles([
    "normalize.css",
    "main.css"
    ]);

});

编辑:我添加了导出默认值{};到模板脚本

3 个答案:

答案 0 :(得分:7)

就像我在问题中的评论一样,我遇到了同样的问题。 就我而言,我有两个像这样的长生不老药召唤:

elixir(mix => {
    mix.browserSync({
        proxy: 'example.dev',
        open: false
    });
});

elixir(mix => {
    mix.sass('app.scss');
    mix.webpack('app.js');
});

我不知道为什么,但是两个elixir调用正在打破webpack。 我将gulpfile更改为:

elixir(mix => {
    mix.sass('app.scss');
    mix.webpack('app.js');
    mix.browserSync({
        proxy: 'example.dev',
        open: false
    });
});

@retrograde,thx在您的评论中提示:)

编辑: 见Laravel Elixir Issue

答案 1 :(得分:2)

你在使用VueJs 2.0 RC之前遇到过这个问题我觉得我所做的是在项目根目录中创建一个webpack.config.js并添加以下内容:

module.exports = {
    resolve: {
        alias: {
            vue: 'vue/dist/vue.js',
        }
    }
};

也不确定它会有所作为但是在尝试上面之前可能会将“vue”:“^ 2.0.1”添加到你的package.json文件并执行npm install(或者只是npm install vue)

答案 2 :(得分:0)

即使您的组件没有选项,其script标记仍然必须导出一个空对象,以便vue-loader可以将render函数注入其中:

<template>
   <div class="top">
     <p>hi</p>
   </div>
</template>

<script>
    export default {};
</script>