配置vue+webpack踩过的坑

本文是在该项目中踩坑得出的结论:

一、 关于"You may need an appropriate loader to handle this file type."

ERROR in ./src/app.vue 1:0
Module parse failed: Unexpected token (1:0)
You may need an appropriate loader to handle this file type.
> <template>
|     <div>
|         <router-view></router-view>
 @ ./src/index.js 1:0-28 16:19-22
 @ multi (webpack)-dev-server/client?http://0.0.0.0:8080 ./src/index.js
Child html-webpack-plugin for "index.html":

上面的错误翻译过来即为没有一个合适的loader来处理这个文件类型,下面显示的是.vue的文件,那么我检查了一下我的webpack配置和package.json都有了vue-loader,但是还是会报错,只能说明这个新版本v15有问题,后来翻来翻去注意到了#321#311,我没有采用低版本的方式而是选择了添加一个plugin到webpack的配置文件
const VueLoaderPlugin = require('vue-loader/lib/plugin');
然后在下面plugins数组中实例出来new VueLoaderPlugin()

二、 webpack loader引起的问题

我的代码:

        rules: [{
              test: '/\.vue$/',
                loader: 'vue-loader'
            }, {
                test: '\.css$/',
                use: ['css-loader', 'vue-style-loader', 'style-loader']
            }
        ]

以上代码经大量查找资料得出结论,这里有两个错误:

错误1:Error: [VueLoaderPlugin Error] No matching rule for .vue files found.

错误2

由于我用的是webpack 4.x loader的规则已经改变了写法,错误1解决办法:所有文件处理采用test处理规则的时候,应该写成test: /\.vue$/
错误2解决方式:先看一下原因:

《深入浅出Webpack》中有提到,Rules是通过固定的方式来处理文件的,其中有一种叫做重置顺序的方式,就是说一组Loader的执行顺序,默认是从右到左执行的

再回到我的代码中可以看到,配置.css文件的时候,use了三个loader,先执行的style-loader肯定是无法识别我写入vue的css样式表,所以会报错误2,解决方式很简单,就是 把css-loader放在最后使其先执行,将css代码编译过后再交给style-loader加载到网页中

三、 vue配置路由的问题

在实例Vue的地方,引入路由要引入我们自己定义的路由,而不是npm安装的路由,即:

import Vue from 'vue';
import VueRouter from 'vue-router';
import router from './router/router.js';
import App from './App.vue';

Vue.use(VueRouter);

var vm = new Vue({
    el: '#app',
    router,  // 我的key是不能改变的  value可以是别的名字
    render: h => h(App)
});

而且引入的自己写的文件的路由要给router变量,这个变量是不可改变的,因为官方源代码实例路由就是用的router这个名字,所以在实例router的时候,写的路由命名(key)必须是router,值可以是别的名字,但是要和你在router导出的名字一致,如果定义路由的时候用的是route,那么实例化就写为router: route,当然定义的路由名默认为router,像这样:

import Vue from 'vue';
import VueRouter from 'vue-router';
import Index from '../components/index/Index.vue';

Vue.use(VueRouter);

export default new VueRouter({  // 此时导出的是默认的router
    routes: [{
        path: '/',
        name: 'Index',
        component: Index
    }]
});

遵守以上规则,可以避免以下错误:
TypeError: Cannot read property 'matched' of undefined

错误1

TypeError: this._router.init is not a function

错误2

四、 component组件配置的问题

根据vue脚手架的规范,App.vue已经常被用来当做组件入口,即为一切切换组件都在这里进行,所以只需要在Vue实例绑定id,写入<router-view>:

    <div id="app">
        <router-view></router-view>
    </div>

定义路由的时候,组件一定是一个组件一个组件引入的,所以key一定是component而不是components,否则就会报下面的错误:
TypeError: Cannot read property '$createElement' of undefined

components既然多了个s,意味着是复数形式,即为多个组件同时引入的时候,这种情况会用在实例化组件或注册组件的时候

五、 组件加载的建议

这个地方算是个建议,现在一般的项目无论大小都存在加载页面渲染页面慢的问题,尤其是含有一些视频和高清图片的项目,更是头疼,因为是同步加载,所以才会慢,如果变成异步加载或是按需加载,不就快了么,除了官方提供的路由懒加载,在webpack模块的加持下,有个require动态引入映入眼帘,还可以通过ensure方法完成按需加载:

const Index = r => require.ensure([], () => r(require('../components/index/Index.vue')), 'Index');

export default new VueRouter({
    routes: [{
        path: '/',
        name: 'Index',
        component: Index
    }]
});
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容