本帖最后由 断天涯大虾 于 2017-3-20 11:16 编辑
微豆 Vdo一个使用 Vue.js 与 Material Design 重构 豆瓣 的项目。
快速使用- # 克隆项目到本地
- git clone https://github.com/RalfZhang/Vdo.git
- # 安装依赖
- npm install
- # 在 localhost:8080 启动项目
- npm run dev
复制代码
教程
安装 vue-cli 脚手架运行如下命令,即可创建一个名为 my-project 的 vue 项目,并且通过本地 8080 端口启动服务 - npm install -g vue-cli
- vue init webpack my-project
- cd my-project
- npm install
- npm run dev
复制代码在运行 vue init webpack my-project 后,会依次要求输入以下配置内容 项目名称 项目描述 作者 选择 Vue 构建:运行+编译 或 仅运行时 是否安装 vue-loader 是否使用 ESLint
是否使用 Karma + Mocha 的单元测试 是否使用 Nightwatch e2e 测试
安装完成后,即可看到以下文件结构: - .
- |-- build // 项目构建相关代码
- | |-- build.js // 生产环境构建代码
- | |-- check-version.js // 检查 node、npm 等版本
- | |-- dev-client.js // 热重载相关
- | |-- dev-server.js // 构建本地服务器
- | |-- utils.js // 构建工具相关
- | |-- webpack.base.conf.js // webpack 基础配置(出入口和 loader)
- | |-- webpack.dev.conf.js // webpack 开发环境配置
- | |-- webpack.prod.conf.js // webpack 生产环境配置
- |-- config // 项目开发环境配置
- | |-- dev.env.js // 开发环境变量
- | |-- index.js // 项目一些配置变量(开发环境接口转发将在此配置)
- | |-- prod.env.js // 生产环境变量
- | |-- test.env.js // 测试环境变量
- |-- src // 源码目录
- | |-- components // vue 公共组件
- | |-- store // vuex 的状态管理
- | |-- App.vue // 页面入口文件
- | |-- main.js // 程序入口文件,加载各种公共组件
- |-- static // 静态文件,比如一些图片,json数据等
- |-- test // 自动化测试相关文件
- |-- .babelrc // ES6语法编译配置
- |-- .editorconfig // 定义代码格式
- |-- .eslintignore // ESLint 检查忽略的文件
- |-- .eslistrc.js // ESLint 文件,如需更改规则则在此文件添加
- |-- .gitignore // git 上传需要忽略的文件
- |-- README.md // 项目说明
- |-- index.html // 入口页面
- |-- package.json // 项目基本信息
- .
复制代码
ESLint 配置ESLint 配置在根目录的 .eslintrc.js 里。
正常情况下,ESLint 报错是因为你的代码不符合现有的 ESLint 规范。
如果你的情况实在不想被 ESLint 报错,我举出两个解决方案,来处理 ESLint 报错问题。
注:本例使用 AirBNB ESLint 规则。 例:通过 npm run dev 启动服务,打开 ./src/main.js ,添加一句 console.log('abc') ,结果如下: - import Vue from 'vue';
- import App from './App';
- import store from './vuex/store';
- /* import router from './router';*/
- // 添加此句
- console.log('abc')
- /* eslint-disable no-new */
- new Vue({
- el: '#app',
- /* router,*/
- template: '<App/>',
- components: { App },
- store,
- });
复制代码注:为做演示,句末未添加分号。
保存 main.js 文件后,页面与终端均提示如下错误: - ERROR Failed to compile with 1 errors
- error in ./src/main.js
- ⚠ http://eslint.org/docs/rules/no-console Unexpected console statement
- C:\Users\Ralf\Documents\code\ralfz\vue\test\vue02\src\main.js:8:1
- console.log('abc')
- ^
- ✘ http://eslint.org/docs/rules/semi Missing semicolon
- C:\Users\Ralf\Documents\code\ralfz\vue\test\vue02\src\main.js:8:19
- console.log('abc')
- ^
- ✘ 2 problems (1 error, 1 warning)
- Errors:
- 1 http://eslint.org/docs/rules/semi
- Warnings:
- 1 http://eslint.org/docs/rules/no-console
- @ multi ./build/dev-client ./src/main.js
复制代码以上输出表明出现两个问题: 警告:不允许 console 语句。 错误:句末未加分号。
解决问题 1 解决问题 2
即自动修复。值得注意的是,自动修复不能解决所有问题,有时也不甚完美,可以多试几次体会下 fix 的效果。 做完更改后,重新运行 npm run dev 即可看到无问题报告,并且 console 语句后已经自动加上了分号。
静态页面开发此时,浏览器应该已经打开了 localhost:8080 页面。
在此情况下,请尝试更改 /src/App.vue 和 /src/components/Hello.vue 文件中 <template> 标签内的内容,保存后即可立即看到浏览器页面已自动更新了你做出的改动。
熟悉之后,便可以完成基础的静态页面(或者说是组件)设计工作。
本项目使用了基于 Vue 2.0 和 Material Desigin 的 UI 组件库 Muse-UI 。
提示: ./src/components 文件夹多用于保存公用组件。至于页面组件,推荐在新建 ./src/view 文件夹后存放于此。
vue-router 2 使用当一个个静态组件完成后,需要按照路由组织这些组件文件。
路由文件是 ./src/router.index.js 。
API 请求转发配置至此,你应该已经完成了所有的静态页面的工作,接下来我们准备搭建请求,为后面的 xhr 请求做好准备。
使用 axiosaxios 库使用起来相当简单。
你可以在单个组件中尝试引入并调用: - import axios from 'axios';
- axios.get('/v2/movie/in_theaters', { 'city': '广州' })
- .then((result) => {
- console.log(result);
- });
复制代码这里,可以用返回的 result 去更新 data(){ } 中 return 的数据。
使用 Vuex 并分离代码为了试代码更加结构化,我们应当将数据请求和视图分离。 这一节中,我们有两个任务要做: 将二者放到同一节中主要是因为二者再同一目录下,我们来查看 ./store 文件夹的结构: - .
- |-- store // 数据处理根目录
- | |-- movies // 单个电影模块文件夹
- | | |-- api.js // 电影模块对外开放的接口
- | | |-- module.js // Vuex 模块
- | | |-- type.js // Vuex 操作 key
- | |-- base.js // 基础方法
- | |-- store.js // Vuex 入口
- .
复制代码
针对第一个任务: base.js 存放封装的基础请求函数 **/api.js 存放该模块下公开的请求函数
针对第二个任务,我们需要先了解 Vuex。
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。
其实在我看来,Vuex 相当于某种意义上设置了读写权限的全局变量,将数据保存保存到该“全局变量”下,并通过一定的方法去读写数据。(希望这能帮助你理解 Vuex)
为了方便模块化管理: 到此便完成了所有开发上的基础问题。
发布提示:可以使用 scp 命令将本地文件拷贝至服务器,例如 scp -P 20 -r dist user@host:/target/location
附:配置与开启 Nginx注:以下以 CentOS 为例 - yum install nginx
- /etc/nginx/conf.d/default.conf
- /doc/nginx.conf
- nginx
复制代码
提示:
结语至此,主体工作已经完成。 欢迎 Star 本项目。
感谢&参考LicenseMIT
|