Vue加载并渲染良好,但随后停止工作

时间:2017-12-25 10:55:33

标签: javascript node.js webpack vuejs2

我有一个使用Vue和Webpack的应用程序。我从webpack文档中获得了这个配置:

webpack.common.js

const path = require('path')
const CleanWebpackPlugin = require('clean-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
  entry: {
    app: path.resolve(__dirname, 'src/app.js')
  },
  plugins: [
    new CleanWebpackPlugin(['dist']),
    new HtmlWebpackPlugin({
      title: 'Production',
      template: 'src/index.html'
    })
  ],
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  },
  resolve: {
    alias: {
      'vue$': 'vue/dist/vue.esm.js'
    }
  }
};

webpack.dev.js

const merge = require('webpack-merge')
const common = require('./webpack.common.js')

module.exports = merge(common, {
    devtool: 'inline-source-map',
    devServer: {
        contentBase: './dist'
    }
})

在前面我有一些Vue代码在我使用webpack-dev-server开发时运行。

当我使用该配置运行它时,页面加载插入的参数并呈现指令(即v-for)并且所有停止工作(除了setInterval),ui未更新,事件不会触发处理程序,没什么。

的index.html

<div id="app" class="container">
        <div class="row">
            <div class="col">
                <div class="jumbotron">
                    <h1 class="display-4">Title</h1>
                    <p class="lead">
                        Lorem ipsum faciebat <i><b>'{{randomWord}}'</b></i>?
                    </p>
                </div>
            </div>
        </div>
</div>

app.js

import Vue from 'vue';
import {mockedData} from './mocked-data';
import './components/search-bar';
import './components/word-cta';

var app = new Vue({
    el: "#app",
    data: function(){
        const words = ["foo", "bar", "baz", "faz", "boo", "foz", "bor"]
        let i = 0
        const getRandomWord = function(){
            if(i == words.length - 1){
                i = 0
            } else {
                i += 1
            }

            return words[i]
        }

        const data = {
            randomWord: words[0],
            lastWords: mockedData,
            result: ""
        }

        setInterval(function(){
            data.randomWord = getRandomWord()
        }, 1700)

        return data
    },
    methods: {
        onSearch: function(result){
            this.result = result;
        }
    }
})

我不知道发生了什么......控制台没有帮助。以下是输出:

  

vue.esm.js:8439下载Vue Devtools扩展程序以获得更好的效果   开发经验:https://github.com/vuejs/vue-devtools   vue.esm.js:8449您正在开发模式下运行Vue。确保   在部署生产时打开生产模式。查看更多提示   在https://vuejs.org/guide/deployment.html

编辑:

我刚刚意识到问题是使用webpack导入Vue。如果我删除了import Vue from 'vue'; 我在.js文件上的行并放入

<script src="https://unpkg.com/vue"></script>

在我的index.html上,问题得到修复,JS的行为符合预期。

有人可以解释原因吗?

1 个答案:

答案 0 :(得分:0)

我的假设是你错过了webpack配置文件中的babel-loader,所以&#34; import&#34;语法不能被webpack识别,你也应该改变&#39; vue / dist / vue.esm.js&#39;到&#39; vue / dist / vue.common.js&#39;。