Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

My Project #7

Open
FrankFang opened this issue Feb 4, 2017 · 57 comments
Open

My Project #7

FrankFang opened this issue Feb 4, 2017 · 57 comments
Labels

Comments

@FrankFang
Copy link
Contributor

FrankFang commented Feb 4, 2017

需求分析

你首先得知道你要做什么,你才能开始做。

项目目标

做一个工具,用户可以用这个工具来写简历

功能列表

  1. 添加简历内容,包括个人信息、工作经历、学习经历、获奖情况、项目经历和联系方式。
  2. 更新简历内容
  3. 选择简历模板
  4. 预览简历
  5. 发布简历

原型图

我们需要画出一个基本的图片,来描述我们的页面是什么样子:

分模块/分区

我们大概将页面分为几个模块,化整为零,分别开发:

每一个区块的内容都不太复杂:

  1. 顶栏。包含 logo 和一些按钮。
  2. 编辑区。包含一组按钮和一些表单。
  3. 预览区。展示 HTML,可切换模板。

然后你大概看一下每个按钮的功能,就可以开始干了!

初始化项目

我们之前了解过 webpack,但是我们的项目使用 vue-cli 这个工具。由于 vue-cli 其实也是用了 webpack,所以我们用起来不会特别陌生。

> mkdir resumer
> cd resumer
> npm init # 使用 npm init 来生成一个 package.json,方便我们添加依赖
...
Press ^C at any time to quit.
name: (resumer)
version: (1.0.0) 0.1.0
description: 简历制作工具
entry point: (index.js)
test command:
git repository:
keywords:
author: frankfang
license: (ISC)
...

然后全局安装 vue-cli(安装在当前目录也可以),并用 vue-cli 来初始化一个 vue 项目

> npm install -g vue-cli
> vue init webpack .   # 注意这里的 . 字符

? Generate project in current directory? Yes
  This will install Vue 2.x version of the template.

  For Vue 1.x use: vue init webpack#1.0

? Project name resumer
? Project description A Vue.js project
? Author frankfang <[email protected]>
? Vue build standalone
? Install vue-router? Yes
? Use ESLint to lint your code? Yes
? Pick an ESLint preset Standard
? Setup unit tests with Karma + Mocha? Yes
? Setup e2e tests with Nightwatch? No

   vue-cli · Generated "resumer".


> npm i
> npm run dev

运行完 npm run dev 你就会发现浏览器自动弹出,并访问了 http://localhost:8080/#/

webpack 已经在命令行持续运行着,不要关掉它,你用你最喜欢的编辑器打开 resumer 目录即可,我们来看看 vue-cli 生成了些什么。

目录结构

.
├── README.md
├── build                    # build 目录用于存放构建脚本,比如 webpack 配置文件
├── config                  # config 目录用于存放一些配置信息,比如配置打包后的 bundle 文件存放在哪里
├── index.html           # 首页
├── node_modules    
├── package.json    
├── src                       # 除了首页,其他的源代码都在 src 目录里
├── static                   # static 目录用于放置静态资源,比如 favicon.ico 文件等
└── test                     # 单元测试等代码放在 test 目录里

你只要搞清楚源代码在 src 里就行了。

index.html

打开 index.html,里面就一个 div#app,很简单嘛。

想一想,是不是缺点儿什么。

居然没有引用 bundle.js!
但是,如果你去看看 http://localhost:8080/#/ 的源代码,会发现是这样的:

居然多了一行

<script type="text/javascript" src="/app.js"></script></body>

好吧,我们先接受这个设定,肯定是 vue-cli 在背后做了什么事情。

src/

src 目录的结构如下:

src
├── App.vue              # App.vue 是主组件,后面讲什么是组件
├── assets                 # assets 用于放置代码之外的资源,比如图片、字体等
├── components       # components 用于放置主组件之外的组件,vue 组件的后缀都是 .vue
├── main.js                # JS 入口文件,浏览器执行的第一行代码在这里,所以我们先看这里
└── router                 # 路由,目前用不到

src/main.js

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

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  template: '<App/>',
  components: { App }
})

main.js 只是把 #app 替换成了 <App/>,那么 <App/> 是什么呢?
components 属性定义了 App:components: { App },这是 ES 6 语法,换成 ES 5 语法就是 components: { App: App }。那么 App 到底长什么样子呢?
import App from './App',说明 ./App.vue 定义了 App 的样子:

<template>
  <div id="app">
    <img src="./assets/logo.png">
    <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;
}
</style>

这是 Vue 单文件组件,你自己看看文档。
一个单文件组件包含三个根标签:<template> <script><style>,三者分别用来表示内容、行为和样式(正交原则)。
使用单文件组件有几个注意事项:

  1. <template> 有且仅有一个儿子标签:
    示例一
    <template> <div></div> </template> 正确
    示例二
    <template> <div></div>  <div></div> </template> 会报错
    示例三
    <template> 你好 </template> 会报错
    
  2. <script> 里面必须包含 export default {}, 也就是说必须默认导出一个对象,对象的属性见文档。
  3. <style> 默认只支持 CSS,想要支持 SCSS 请看 vue-cli webpack 模板的文档

copy 了, run 了,接下来我们 modify

我们来改一改 App.vue。webpack 已经在 watch 文件了,所以改完代码,你直接切到浏览器就可以看到效果了(连刷新都不用)。

改 template 和 style

//App.vue
<template>
  <div>
    <p>你好</p>
  </div>
</template>

<script>
export default {
  name: 'app'
}
</script>

<style>
  p{color: red;}
</style>

结果我们看到一个红色的你好。

加个 data

<template>
  <div>
    <p>{{text}}</p>
  </div>
</template>

<script>
export default {
  name: 'app',
  data: {
    text: '你好'
  }
}
</script>

<style>
  p{color: red;}
</style>

再看页面,居然没有「你好」两个字。出错了?

这个时候你该干什么?

  1. 看看命令行有没有报错
  2. 看看浏览器有没有报错

命令行没报错,浏览器呢:

> [Vue warn]: The "data" option should be a function that returns a per-instance value in component definitions. 

他说 data 应该是一个 function。看看单文件组件的文档,知道应该改成这样:

<template>
  <div>
    <p>{{text}}</p>
  </div>
</template>

<script>
export default {
  name: 'app',
  data: function(){
    return {
      text: '你好'
    }
  }
}
</script>

<style>
  p{color: red;}
</style>

喝,报错更奇怪了:

原来这是 ESLint 插件认为我们写的代码不符合规范,它说

  1. 花括号前面要加一个空格
  2. 函数的圆括号前面要加一个空格

你有两个选择

  1. 按照它说的,修改源代码
  2. 禁用 ESLint

如果你想折腾,就选 1, 把代码改成

<script>
export default {
  name: 'app',
  data: function () {  // 👈 注意空格
    return {
      text: '你好'
    }
  }
}
</script>

如果你不想折腾,就去 build/webpack.base.conf.js 里,把 ESLint 给注释掉,然后重新运行 npm run dev
我就偷懒,选择后者吧。

// 第35行
  module: {
    rules: [
      //{
        //test: /\.(js|vue)$/,
        //loader: 'eslint-loader',
        //enforce: "pre",
        //include: [resolve('src'), resolve('test')],
        //options: {
          //formatter: eslintFriendlyFormatter
        //}
      //},
      {

然后关闭之前的 npm run dev,重新运行。

现在,我爱怎么写就怎么写。

commit: copy - run - modify

现在,我们基本知道了一个组件要怎么写。

三分天下

我们的应用(App)含有三个部分:顶栏、编辑区和预览。

所以我们新建三个组件。下面是组件结构图:

新建三个 vue 文件:

commit: add Topbar, ResumePreview, and ResumeEditor

看代码的过程中有哪里不懂,就在群里问一下,或者在 vue 文档/ ES 6 新特性列表里搜索下。

补充 HTML & CSS

UI 预览在这里:https://jirengu-inc.github.io/jrg-project-5/resumer_mockups/index.html

点击左侧的「编辑」页面,就可以看到页面标注了:

有了标注我们就开始把大体的 HTML 和 CSS 写好。

设计稿的总宽度是 1440px,并没有说明如果页面宽度小于 1440px 会怎样。

这个时候你应该问设计师,「页面宽度如果不足 1440px 我要怎么显示页面?」

目前设计师就是我了。我会说:「按比例缩小吧,最小缩小到 1024px。」

「手机宽度只有不到 400px 怎么办?」

「我们的网站不兼容手机」

「这是你说的哈」

这样我们与设计师的愉快的沟通就结束了,然后你才能开始写代码。

在与设计师交流之前,不要写样式代码。

下面是添加样式的过程:

commit: add reset.css
commit: add normalize.css
commit: 将 normalize.css 和 reset.css 移到最前面
commit: 使用 flex 布局

如果你不会 Flex,这里有我的直播课:Flex
到目前为止,效果如下:

继续

commit: 调节位置、背景色等
commit: add styles for topbar

然后,当我把分辨率调到 1440px 以上之后,发现 main 并没有居中。(如果你的屏幕不足 1440px,可以缩放一下网页)

commit: fix: main is not centered
commit: 对齐文字,调节内外边距,都改为 16px 的距离

现在好看多了:

致饥人谷学员

搞定上面的所有代码,做到和最后一张图基本一致。

  1. 截图放到评论里,推荐一个图片上传工具:https://yotuku.cn/#/
  2. 预览链接也放到评论里

如何生成预览链接呢?

首先需要将 config/index.js 中的 assetsPublicPath 改为 '/jrg-project-5/resumer/dist'

commit: 修改 assetsPublicPath

然后运行

npm run build

就会生成一个 dist 目录,dist/index.html 就是可以直接预览的页面(不过必须是 http 协议)

我的预览链接:https://jirengu-inc.github.io/jrg-project-5/resumer/dist/

不知道为什么,dist/index.html 不行 dist/ 就可以。

预告

两天后出下一次任务,内容是完善三个组件。

@WangXiaoyugg
Copy link

电脑没有1440*1440的分辨率,在1368*768下就是截图是这样,我也没办法.
预览链接

@FrankFang
Copy link
Contributor Author

FrankFang commented Feb 6, 2017

@WangXiaoyugg
我看了是 OK,你只要不把宽度写死就行了。 你按 ctrl + - 试试

@hungryYang
Copy link

hungryYang commented Feb 6, 2017

YCR
resume
预览
@FrankFang 已经修改

@lzm320856
Copy link

lzm320856 commented Feb 6, 2017


预览

@LisaLi85
Copy link

LisaLi85 commented Feb 6, 2017


预览
LLL
@FrankFang 已修改

@Hunter-Gu
Copy link

2017-02-06 6 29 10
不知道为什么生成的链接不正确

@Rice-F
Copy link

Rice-F commented Feb 6, 2017

截图
预览
SJ

@wuhanjun
Copy link

wuhanjun commented Feb 6, 2017

预览

WHJ

@zhangjiuyi
Copy link

预览

ZJY

@Zegendary
Copy link

Zegendary commented Feb 7, 2017

page
code
image

─=≡Σ(((つ•̀ω•́)つ

ZXW

@FrankFang

@TerenYeung
Copy link

yjl for vue-resume-generator-01
source
demo

@xiayujlu
Copy link

xiayujlu commented Feb 7, 2017


预览

@JaeJiang
Copy link

JaeJiang commented Feb 7, 2017


姜杭轩
预览
代码

@yukui630
Copy link

yukui630 commented Feb 7, 2017

预览
代码
截图

@raszxcv
Copy link

raszxcv commented Feb 7, 2017


仓库
预览

@starlikerain
Copy link

starlikerain commented Feb 8, 2017

fixed

Preview img

source preview

source code

@ReedSun
Copy link

ReedSun commented Feb 8, 2017

预览页面

方方老师的页面好像有一个问题,如果页面宽度太小的话,页面样式会错乱,main元素里面的东西会往左移动到浏览器窗口外,我在最外层元素上加了min-width:1024px页面就正常了。

SHZ

@FrankFang
Copy link
Contributor Author

@ReedSun 👍 我没考虑小于 1024px 的情况。

@wlf1112
Copy link

wlf1112 commented Feb 8, 2017


代码
预览WLF

@Hsyneve
Copy link

Hsyneve commented Feb 8, 2017

预览
源码

@batman-1
Copy link

batman-1 commented Feb 9, 2017

预览

@xiaokunxu
Copy link


预览
代码

@muxi7
Copy link

muxi7 commented Feb 10, 2017

预览地址
代码地址
ZW

@have-not-BUG
Copy link

截图

代码地址
代码预览地址

LC

@code-zhangrui
Copy link


预览
代码

@chaocool
Copy link


预览
代码

CJC
后面继续完善

@baixiaoji
Copy link


预览

@ab690257072
Copy link


预览
ZLQ

@Anticlimax
Copy link


预览

@JeromeYangtao
Copy link

_4r b c arcyuf66jro l
预览

@superDCF
Copy link

superDCF commented May 7, 2017

demo

@n313893254
Copy link

n313893254 commented May 31, 2017

预览
预览

@13hoop
Copy link

13hoop commented May 31, 2017

预览

@MasterGaoJin
Copy link

预览
链接

@success-cg
Copy link

success-cg commented Jun 6, 2017

预览1.png
链接
demo

@kumabearplus
Copy link

image
效果
demo

@Honohonoho
Copy link


预览
代码

@boloog
Copy link

boloog commented Jun 15, 2017

resumer.png
预览
源码

@komolei
Copy link

komolei commented Jun 22, 2017

default

预览
demo

@swhzzz
Copy link

swhzzz commented Jul 9, 2017

预览
代码

@robbchan
Copy link

image
预览链接
代码地址

@selectyang
Copy link

image
预览
代码

@zhaipanyu
Copy link

zhaipanyu commented Jul 18, 2017


预览地址
代码

@imgwho
Copy link

imgwho commented Jul 20, 2017

TIM截图20170720113719.png
预览
仓库

@forsuccess
Copy link

image

预览
仓库

@HuangHongRui
Copy link

GitShow 💯
Code
image

@andreaxiang
Copy link

2017-07-30 20 14 04

预览地址

@tcitds1
Copy link

tcitds1 commented Jul 31, 2017

预览
预览

@zhuyutrisla
Copy link

image

预览

@huoguozhang
Copy link

1.png

@ZhyCong
Copy link

ZhyCong commented Aug 5, 2017

screenshot_24

@huoguozhang
Copy link

预览
代码

@clementlxd
Copy link

@Alfred-ZF
Copy link

预览
代码

@blackhu0804
Copy link


预览链接

@wangpeng1994
Copy link


预览地址

@upupdayday
Copy link

预览
code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests