vue 2.0 无法挂载组件:未定义模板或渲染函数
vue 2.0 Failed to mount component: template or render function not defined
我正在使用 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"
]);
});
编辑: 我添加了 export default {};到模板脚本
即使您的组件没有选项,它的 script
标签仍然必须导出一个空对象,以便 vue-loader
可以将 render
函数注入其中:
<template>
<div class="top">
<p>hi</p>
</div>
</template>
<script>
export default {};
</script>
您好,在玩 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视图)
就像我在问题中的评论一样,我遇到了同样的问题。
在我的例子中,我有两个像这样的长生不老药调用:
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,感谢您在评论中的提示:)
编辑:
看到这个 Laravel Elixir Issue
我正在使用 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"
]);
});
编辑: 我添加了 export default {};到模板脚本
即使您的组件没有选项,它的 script
标签仍然必须导出一个空对象,以便 vue-loader
可以将 render
函数注入其中:
<template>
<div class="top">
<p>hi</p>
</div>
</template>
<script>
export default {};
</script>
您好,在玩 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视图)
就像我在问题中的评论一样,我遇到了同样的问题。 在我的例子中,我有两个像这样的长生不老药调用:
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,感谢您在评论中的提示:)
编辑: 看到这个 Laravel Elixir Issue