【问题标题】:Vueify + Elixir + Hotloading - Uncaught TypeError: Cannot read property 'indexOf' of undefinedVueify + Elixir + Hotloading - 未捕获的类型错误:无法读取未定义的属性“indexOf”
【发布时间】:2016-07-01 15:08:36
【问题描述】:

我已将 Elixir 设置为使用带有热重载插件的 Vueify。一切编译正常,但我的编译文件出现控制台错误,并且 Vue 组件似乎没有转换为 html,它仍然显示 <app></app> 标签。如果我从 elixir 中删除热重载插件,页面呈现正常。

错误是:

Uncaught TypeError: Cannot read property 'indexOf' of undefined

控制台输出它

[HMR] Attempting websocket connection to http://localhost:3123
app.js:10904 Uncaught TypeError: Cannot read property 'indexOf' of undefined
[vue-devtools] Ready. Detected Vue v1.0.26
[HMR] Websocket connection successful.
[HMR] Updated modules ["resources/assets/js/embeds/html/app.vue"]

所以值得一提的是,它正在接收来自热重载的消息,只是因为这个错误而没有呈现页面。编译的app.js 文件中的以下行发生错误。

// compat with < 2.0.0-alpha.7
  if (Vue.config._lifecycleHooks.indexOf('init') > -1) {
    initHookName = 'init'
  }

这是我的文件

gulpfile.js

var elixir = require('laravel-elixir');
var gutil = require('gulp-util');
require('laravel-elixir-vueify');

if (gutil.env._.indexOf('watch') > -1) {
    //  Add the browserify HMR plugin
    elixir.config.js.browserify.plugins.push({
        name: 'browserify-hmr',
        options: {}
    })
}

elixir(function (mix) {
    mix.browserify('embeds/html/main.js', 'public/js/embeds/html/app.js');
});

ma​​in.js

var Vue = require('vue')
var App = require('./app.vue')

new Vue({
    el: 'body',
    components: {
        app: App
    },
    created: function() {
        console.log('test');
    }
})

app.vue

<style>

</style>

<template>
    <div id="player-wrapper">
        {{ msg }}
    </div>
</template>


<script>
    export default {
        data () {
            return {
                msg: 'Hello world!'
            }
        }
    }
</script>

index.blade.php

<body>
    <app></app>
    <script type="text/javascript" src="{{ asset('js/app.js') }}"></script>
</body>

【问题讨论】:

    标签: javascript browserify vue.js laravel-elixir


    【解决方案1】:

    这可能是 Vue 和 Vue-hot-reload-api 之间的版本兼容性问题。

    例如,vueify@8.7.0 目前依赖于 vue-hot-reload-api@1.3.2,它似乎只兼容 Vue@1.x。

    根据个人经验,我在将 vue-hot-reload-api@2.x 与 vue@1.x 一起使用时发生了这个特定错误,尽管我没有反过来测试它。

    Vue-hot-reload-api's Github readme 最上面的一个注释,似乎也验证了这个问题。

    就我而言,我只是重新安装了 vue@1.0.26 兼容版本的 vue-hot-reload-api,如下:

    npm install --save-dev vue-hot-reload-api@^1.3.2
    

    所以看看你的依赖的版本。

    【讨论】:

    • 非常感谢。我降级到 vue-hot-reload-api@1.3.2 并且成功了。
    • 谢谢,旧的 vue-hot-reload-api 也对我有用!
    猜你喜欢
    • 2017-08-30
    • 2022-01-01
    • 2023-04-01
    • 2021-12-22
    • 1970-01-01
    • 2015-01-06
    • 2017-07-26
    相关资源
    最近更新 更多