美文网首页
配置vue+webpack踩过的坑

配置vue+webpack踩过的坑

作者: 苏日俪格 | 来源:发表于2018-11-02 10:16 被阅读63次

一、 关于"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
    }]
});

相关文章

  • 配置vue+webpack踩过的坑

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

  • Spark配置

    配置方法 配置注意事项 配置踩过的坑

  • webpack+vue项目报错处理参考

    最近再用vue+webpack做项目,不得不说vue用起来还是很爽的,不过webpack用起来不太熟练踩了不少坑,...

  • 交互设计师所要避免的几个坑

    前言 工作中难免会踩到几个坑,即使现在不踩以后还会踩,只有踩过才会深刻记住,踩过说明爱过!但是踩过的坑必须把坑填满...

  • Cordova踩坑日记

    Cordova踩坑日记 1.配置环境 ​ 配置SDK踩了很多坑,其实只需要下载一个 android studi...

  • vue踩过的坑

    vue踩过的坑

  • D1094:踩坑的价值最大化

    是人就会踩坑,不踩坑理论上就不属于人类,踩坑是人之常情,能回头站在坑边反思,才是对踩过的的坑价值最大化的体现,要不...

  • nacos2021.1配置踩坑记录

    前言 对比官网配置,踩了N个坑,最终还是归纳为版本问题 spring 环境 naocs包,这里比较新,踩坑!!! ...

  • 投资避坑指南

    2022年9月14日(第224天) 经常反思踩过的坑,犯过的错,了解别人踩过的坑,犯过的错,思考如何避免自己下次踩...

  • PHP中的数据类型

    一说到数据类型,这个坑就太多了,多到有哪些坑,有多少坑,不知道自己还会踩哪些坑,以及踩过的坑还会不会再踩,我对...

网友评论

      本文标题:配置vue+webpack踩过的坑

      本文链接:https://www.haomeiwen.com/subject/fmsqxqtx.html