webpack构建Vue2.0项目初体验

想着这几天的体验,刚开始捣鼓着webpack构建Vue2.0的项目,真的是一片心酸啊~~因为看着网上诸多关于webpack + vue的教程,这些教程大多数都是一开始就介绍一大堆相关的配置,对于刚入门vue的新手小白们无疑是十分痛苦的。【个人建议,也是我自己比较有效的方法,对于这些相关的配置,你可以浏览,记住作用是什么,但不要先去深究其中,可以在项目中深入了解。】

本文前提准备:有 vue 基础,搭配好 nodejs、webpack、vue-cli 环境,相关的安装教程网上的都大同小异,就不啰嗦了,直接从 webpack 构建项目开始。

初始化创建一个 Vue 项目

  • 切换到目标文件夹。
  • 执行命令(这里的项目名为:project)。

sudo init webpack 项目名称

注意:项目名称不能包含有大写字母,不然会报错。

image1.png
  • 输入相关的信息和依赖文件选项,这些根据你自己的需要,完成后开始构建你的项目。
image2.png
  • 项目构建完成,切换到目标文件夹,会看到已经生成了一大堆文件。
image3.png
  • 目标文件夹下,安装相关的依赖,直到完成。

sudo npm install

image4.png
  • 相关依赖安装完成后,启动服务器,启动项目。

    sudo npm run dev

image5.png
image6.png
  • 接下来,你就可以在浏览器中在服务器中访问你的 localhost,注意端口号要一样。
image7.png

以上,就是通过webpack构建Vue项目的过程。接下来,简单地总结相关的项目文件目录。

文件目录

先来看下目录结构:

image8.png
  • build:webpack 的相关配置,即:构建脚本目录。【这里存放我们最后的代码】
  • config:路径端口值的相关配置,即:项目配置。【一般情况下,默认配置就好了】
  • node_modules:依赖模块。【这里有贼多文件。。不管】
  • src:组件和入口文件,即:项目开发的目录。
  • static:静态资源,不会被 wabpack 构建。【主要存放字体图片图标等】

上面这几个就是根目录下面的五个子文件夹,主要的作用上面也介绍了。下面继续了解下这些文件夹里面的主要文件。

build(构建脚本目录)

build 文件夹下的相关文件如下:

image9.png
  • build.js:生产环境构建。
  • check-version.js:版本验证工具。
  • utils.js:构建相关工具。
  • vue-loader.conf.js:vue-loader 的相关配置(vue-loader:将.vue文件转换成 webpack 包,并且和整个打包过程组合起来)。
  • webpack.base.conf.js:wabpack 基础配置。
  • webpack.dev.conf.js:wabpack 开发环境配置。
  • webpack.prod.conf.js:wabpack 生产环境配置。

config(项目配置)

config 文件夹下的相关文件如下:

image10.png
  • dev.env.js:开发环境的变量。
  • pro.env.js:生产环境的变量。
  • index.js:项目配置文件。

尤其要重视的是index.js这个文件。

node_modules(依赖模块)

这个文件夹下的子文件夹贼多~主要是存放相关的依赖文件。。不多说~

static(静态资源)

主要存放字体、图片和图标等。

src(组件和入口文件)【放在最后总结,表示非常非常重要~】

src 文件夹下的相关文件如下:


image11.png
  • assets:资源目录。
  • components:存放相关的组件文件,是 .vue 文件。
  • router:路由文件,主要存放的是相关的路由代码。
  • App.vue:项目入口文件,也就是根组件。(你怎么实现你的页面,引进外部相关模块后,就在这里进行)。
  • main.js:项目的核心文件。即:引进模块,实例化 Vue 对象等。

根目录下的其他重要文件

  • index.html:首页入口文件。
  • package.json:项目配置文件,重要。【在项目中慢慢体会!】

总结了这么多个文件及其作用,来看看下简单的实现例子。

简单例子

需求:实现简单的路由切换。

  • 将原本的页面去掉。
  • 添加两个组件,用于路由的渲染。
image12.png
  • 实现两个组件文件。
// page1.vue
<template>
    <transition name="t1">
        <div id="page1">
            {{ msg }}
        </div>
    </transition>
</template>

<script>
export default {
  name: "page1",
  data() {
    return {
      msg: "page11111111"
    };
  }
};
</script>

<style>
#page1 {
  width: 100%;
  height: 600px;
  background-color: violet;
  margin-top: 15px;
  font-size: 40px;
}

.t1-enter-active,
.t1-leave-leave {
  transition: opacity 1s ease;
}

.t1-enter,
.t1-leave-to {
  opacity: 0;
}

.t1-leave,
.t1-enter-to {
  opacity: 1;
}
</style>

// page2.vue
<template>
    <transition name="t2">
        <div id="page2">
            {{ msg }}
        </div>
    </transition>
</template>

<script>
export default {
  name: "page2",
  data() {
    return {
      msg: "page22222222"
    };
  }
};
</script>

<style>
#page2 {
  width: 100%;
  height: 600px;
  background-color: silver;
  margin-top: 15px;
  font-size: 40px;
}

.t2-enter-active,
.t2-leave-leave {
  transition: opacity 1s ease;
}

.t2-enter,
.t2-leave-to {
  opacity: 0;
}

.t2-leave,
.t2-enter-to {
  opacity: 1;
}
</style>
  • index.js文件中添加路由信息。
import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
// 引进组件
import page1 from '@/components/page1'
import page2 from '@/components/page2'

Vue.use(Router)

export default new Router({
  routes: [{
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    },
    {   // page1路由信息
      path: '/page1',
      name: 'page1',
      component: page1
    },
    {   // page2路由信息
      path: '/page2',
      name: 'page2',
      component: page2
    },
  ]
})
  • 最后,在 app.vue 文件中添加我们想要的页面布局。
<template>
  <div id="app">
    <router-link to="/page1" class = "btn">page111Btn</router-link>
    <router-link to="/page2" class = "btn">page222Btn</router-link>
    <router-view></router-view>
  </div>
</template>

<script>
  export default {
    name: 'App',
  }
</script>

<style>
  #app {
    font-family: 'Avenir', Helvetica, Arial, sans-serif;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    text-align: center;
    color: #2c3e50;
    margin-top: 60px;
  }

  .btn{
    font-size: 20px;
    text-decoration: none;
    border: 1px solid silver;
    margin-left: 10px;
    padding: 10px;
    color: black;
    font-weight: 800;
  }
</style>
  • 实现的效果如下:
效果.gif
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容