Laravel Elixir Browserify 失败!:意外的令牌 - 使用 VueJs
Laravel Elixir Browserify Failed!: Unexpected token - Using VueJs
谁能帮我解决这个问题?我正在尝试学习如何使用 Laravel 的 elixir.browserify + vue.js,但我做不到!我收到此错误:
gulp-notify: [Laravel Elixir] Browserify Failed!: Unexpected token
D:\xampp\htdocs\pwebdev-project\resources\assets\js\components\skills.vue:1
<template>
^
ParseError: Unexpected token
知道可能是什么问题吗?我需要在这里指定我想使用 vueify 的地方还是我只需要像我一样 npm 安装它?
package.json
{
"private": true,
"devDependencies": {
"babel-runtime": "^6.3.13",
"gulp": "^3.8.8",
"vue-hot-reload-api": "^1.2.2",
"vueify": "^7.0.2"
},
"dependencies": {
"bootstrap": "^3.3.6",
"font-awesome": "^4.5.0",
"jquery": "^2.1.4",
"laravel-elixir": "^4.0.0",
"vue": "^1.0.11",
"vue-resource": "^0.1.17"
}
}
gulpfile.js
var elixir = require('laravel-elixir');
elixir(function(mix) {
mix.browserify('main.js');
});
main.js
var Vue = require('vue')
var Skills = require('./components/skills.vue')
new Vue({
el: '#app',
components: {
'skills' : Skills
}
})
和/components/skills.vue
<template>
<div>
<select v-model="skills_array" class="form-control" multiple>
<option v-for="skill in list" value="@{{skill.id }}" >
@{{ skill.name }}
</option>
</select>
<input type="text" name="skills" hidden v-model="skills_array">
</div>
</template>
<script>
export default {
created: function () {
var data = [];
for (var i = 0; i < this.list.length; i++) {
data.push({
'id': this.list[i].id,
'name': this.list[i].name,
'selected': false
});
}
this.list = data;
this.skills_array = [];
},
props: ['list', 'skills_array']
}
</script>
您似乎混淆了模板和 Javascript 代码。
在main.js
中,你这样做:
var Skills = require('./components/skills.vue')
require
旨在导入 Javascript 模块,以便一个模块中的代码可以在另一个模块中使用。 components/skills.vue
不是 Javascript 文件,它是 HTML。所以 Javascript 解释器对此感到窒息。
您需要重写 skills.vue
以公开 Javascript。 HTML 应该(可能)移动到 blade 模板 - 我说可能,因为看起来你可能正在尝试使用 Vue 的 Javascript 模板系统,这是我不知道的没有太多经验(而且我在您发布的代码中看不到任何证据)。
编辑
我以前从未使用过 vueify
,但我猜你的 gulpfile.js
中缺少一些应该配置 vueify
.
的东西
例如,我编写 Coffeescript 而不是 Javascript 并使用 elixir
来浏览我的 Coffeescript。为了让它正常工作,我必须向我的 gulpfile 添加一些配置:
// add the coffeeify transform to the browserify stack
//
elixir.config.js.browserify.transformers.push({
name: 'coffeeify',
options: {}
});
// configure browserify to recognize the .coffee extension
//
elixir.config.js.browserify.options.extensions = ['.coffee'];
elixir(function(mix) { ... });
我猜你需要像我上面的第一个配置项那样做一些事情:
elixir.config.js.browserify.transformers.push({
name: 'vueify',
options: {}
});
这将指示 browserify 将 vueify 添加到它的转换堆栈中。
您可能还需要第二个选项:
elixir.config.js.browserify.options.extensions = ['.vue'];
但我不确定。在我的系统上,添加 .coffee
扩展允许我在我的代码中引用没有 .coffee
扩展的模块。看来你并没有这样做。
希望对您有所帮助!
环顾四周后,我发现 this repo (JeffreyWay) 其中指出我需要在我的 gulp 文件中添加一些行
基本上我需要这个:
npm install laravel-elixir-vueify
然后在我的 gulp 文件中:
var elixir = require('laravel-elixir');
require('laravel-elixir-vueify'); ---> this line was missing
elixir(function(mix) {
mix.browserify('main.js');
});
我认为 elixir 已经与 vueify 兼容:/我希望这对任何人都有帮助。很抱歉让那些试图帮助我的人浪费了你的时间。
我知道这已经是很久以前的事了,但是将此代码块放入您的 package.json
文件将正确编译它。
"browserify": {
"transform": [
"vueify",
"babelify"
]
},
现在您可以再次 运行 gulp
谁能帮我解决这个问题?我正在尝试学习如何使用 Laravel 的 elixir.browserify + vue.js,但我做不到!我收到此错误:
gulp-notify: [Laravel Elixir] Browserify Failed!: Unexpected token
D:\xampp\htdocs\pwebdev-project\resources\assets\js\components\skills.vue:1
<template>
^
ParseError: Unexpected token
知道可能是什么问题吗?我需要在这里指定我想使用 vueify 的地方还是我只需要像我一样 npm 安装它?
package.json
{
"private": true,
"devDependencies": {
"babel-runtime": "^6.3.13",
"gulp": "^3.8.8",
"vue-hot-reload-api": "^1.2.2",
"vueify": "^7.0.2"
},
"dependencies": {
"bootstrap": "^3.3.6",
"font-awesome": "^4.5.0",
"jquery": "^2.1.4",
"laravel-elixir": "^4.0.0",
"vue": "^1.0.11",
"vue-resource": "^0.1.17"
}
}
gulpfile.js
var elixir = require('laravel-elixir');
elixir(function(mix) {
mix.browserify('main.js');
});
main.js
var Vue = require('vue')
var Skills = require('./components/skills.vue')
new Vue({
el: '#app',
components: {
'skills' : Skills
}
})
和/components/skills.vue
<template>
<div>
<select v-model="skills_array" class="form-control" multiple>
<option v-for="skill in list" value="@{{skill.id }}" >
@{{ skill.name }}
</option>
</select>
<input type="text" name="skills" hidden v-model="skills_array">
</div>
</template>
<script>
export default {
created: function () {
var data = [];
for (var i = 0; i < this.list.length; i++) {
data.push({
'id': this.list[i].id,
'name': this.list[i].name,
'selected': false
});
}
this.list = data;
this.skills_array = [];
},
props: ['list', 'skills_array']
}
</script>
您似乎混淆了模板和 Javascript 代码。
在main.js
中,你这样做:
var Skills = require('./components/skills.vue')
require
旨在导入 Javascript 模块,以便一个模块中的代码可以在另一个模块中使用。 components/skills.vue
不是 Javascript 文件,它是 HTML。所以 Javascript 解释器对此感到窒息。
您需要重写 skills.vue
以公开 Javascript。 HTML 应该(可能)移动到 blade 模板 - 我说可能,因为看起来你可能正在尝试使用 Vue 的 Javascript 模板系统,这是我不知道的没有太多经验(而且我在您发布的代码中看不到任何证据)。
编辑
我以前从未使用过 vueify
,但我猜你的 gulpfile.js
中缺少一些应该配置 vueify
.
例如,我编写 Coffeescript 而不是 Javascript 并使用 elixir
来浏览我的 Coffeescript。为了让它正常工作,我必须向我的 gulpfile 添加一些配置:
// add the coffeeify transform to the browserify stack
//
elixir.config.js.browserify.transformers.push({
name: 'coffeeify',
options: {}
});
// configure browserify to recognize the .coffee extension
//
elixir.config.js.browserify.options.extensions = ['.coffee'];
elixir(function(mix) { ... });
我猜你需要像我上面的第一个配置项那样做一些事情:
elixir.config.js.browserify.transformers.push({
name: 'vueify',
options: {}
});
这将指示 browserify 将 vueify 添加到它的转换堆栈中。
您可能还需要第二个选项:
elixir.config.js.browserify.options.extensions = ['.vue'];
但我不确定。在我的系统上,添加 .coffee
扩展允许我在我的代码中引用没有 .coffee
扩展的模块。看来你并没有这样做。
希望对您有所帮助!
环顾四周后,我发现 this repo (JeffreyWay) 其中指出我需要在我的 gulp 文件中添加一些行
基本上我需要这个:
npm install laravel-elixir-vueify
然后在我的 gulp 文件中:
var elixir = require('laravel-elixir');
require('laravel-elixir-vueify'); ---> this line was missing
elixir(function(mix) {
mix.browserify('main.js');
});
我认为 elixir 已经与 vueify 兼容:/我希望这对任何人都有帮助。很抱歉让那些试图帮助我的人浪费了你的时间。
我知道这已经是很久以前的事了,但是将此代码块放入您的 package.json
文件将正确编译它。
"browserify": {
"transform": [
"vueify",
"babelify"
]
},
现在您可以再次 运行 gulp