webpack+vue学习记录

Day one: 一个最简单的webpack项目

我们新建一个TODO项目,初始化命令:

npm init;

安装npm,然后会有一些warn指示,我们根据指示安装项目所需要的依赖,请根据提示安装

npm i css-loader

然后创建src,新建一个app.vue,这是一个vue文件,内容很简单

<template>
<div id="text">
    {{text}}
</div>
</template>
<script>
export default {
    data(){
        return {
            text:'hello world'
        }
    }
}
</script>
<style>
    #test{
        color:black;
    }
</style>

新建webpack.config.js

const path = require('path')
module.exports = {
    entry: path.join(__dirname,'src/index.js'),
    output:{
        filename: 'bundle.js',
        path: path.join(__dirname,'dist')
    }
}

包含入口文件main.js,和出口文件bundle.js;

此时定义入口文件index.js,配置一个vue对象,将内容挂载上去

import Vue from 'vue'
import App from './app.vue'

const root = document.createElement('div')
document.body.appendChild(root)

new Vue({
    render:(h) => h(App)
}).$mount(root)   

入口文件定义好后,我们可以在package.json中加一行脚本,指定在该项目中webpack打包,而不是全局打包

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --config webpack.config.js"  //这里
  }

此时我们可以打包试试 npm run build

哈哈,报错,大家看看报错

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.

我们需要安装一个loader区处理vue类型的文件,然后配合我学习的视屏里是这样配置的

const path = require('path')
module.exports = {
    entry: path.join(__dirname,'src/index.js'),
    output:{
        filename: 'bundle.js',
        path: path.join(__dirname,'dist')
    },
    module:{
        rules:[
            {
                test: /\.vue$/,
                loader: 'vue-loader',
            }
        ]
    }
}

我试了之后还是不行,很鸡肋,不知道视频中的webpack是哪个版本,然后百度了一个,现在的版本是要加一个插件VueLoaderPlugin的,在查找问题的过程中自作主张加了一个严格模式的规定,然后,看

'use strict'
const path = require('path')
const VueLoaderPlugin = require('vue-loader/lib/plugin')  //这里
module.exports = {
    entry: path.join(__dirname,'src/index.js'),
    output:{
        filename: 'bundle.js',
        path: path.join(__dirname,'dist')
    },
    plugins:[   //这里
        new VueLoaderPlugin()
    ],
    module:{
        rules:[
            {
                test: /\.vue$/,
                loader: 'vue-loader',
            }
        ]
    }
}

我本以为这样好了,但是,继续报错

[vue-loader] vue-template-compiler must be installed as a peer dependency, or a compatible compiler implementation must be passed via options.

很生气,在一开始的warn中,视频中是有这个依赖提示的,但是我没有就没安装,现在来了,总归是要装的

npm i vue-template-compiler

继续,烧香祈祷,呵呵

ERROR in ./src/app.vue?vue&type=style&index=0&lang=css& 18:0
Module parse failed: Unexpected token (18:0)
You may need an appropriate loader to handle this file type.
|
|
> .test{
|     color:black;
| }

继续报错,保持微笑,这里提示的意思应该是样式需要loader来处理它,矫情,于是百度了一下,加了这个:

'use strict'
const path = require('path')
const VueLoaderPlugin = require('vue-loader/lib/plugin')
module.exports = {
    entry: path.join(__dirname,'src/index.js'),
    output:{
        filename: 'bundle.js',
        path: path.join(__dirname,'dist')
    },
    plugins:[
        new VueLoaderPlugin()
    ],
    module:{
        rules:[
            {
                test: /\.vue$/,
                loader: 'vue-loader',
            },
            {
                test: /\.css$/,             //这里
                use:['vue-style-loader','css-loader']
            }
        ]
    }
}

最后我终于成功了,看到一片绿的时候,简直想哭啊!!!
呼呼

最终就生成了一个dist/bundle.js文件啊,感觉自己好棒棒!!

好,第一个课程完美,希望大家跟着视频学习的时候有耐心一点,因为老师和你的环境和用的版本毕竟不一样,仔细研究一下报错,耐心解决,感觉在这个过程里收获比较大。哈哈!

posted @ 2018-10-22 20:26  青山_1997  阅读(521)  评论(0编辑  收藏  举报