前后端项目对接流程梳理

摘要:
课程目标掌握电子商务网站从设计到发布的整个过程。具备独立开发前端项目的能力。建筑设计。前端和后端完全分离。分层架构。模块化技术选择。HTMlCSSJJQery辅助工具。WebpackNodeJsNPMShell效率工具。SublimeChromeChallesGit。课程安排//通用模块高可重用工具类的设计和包装
 

课程目标

掌握一个电商网站从设计到上线的整个过程所涉及的流程 
具备独立开发一个前端项目的能力

架构设计

前后端完全分离
分层架构
模块化

技术选型

HTMl CSS JS jQery

辅助工具

Webpack NodeJs NPM Shell

效率工具

Sublime Chrome Charles Git

课程安排

//基础框架的搭建
双平台的开发环境安装
git仓库规范化用法
webpack脚手架搭建实战
//通用模块
可高复用工具类设计与封装
通用模块设计与独立打包方法
高逼格UI开发经验与技巧
//用户模块
数据安全性处理方案
表单同步/异步验证
小型SPA开发
//商品模块
jQuery 插件模块改造
独立组建抽离技巧
多功能列表开发
//购物车模块
商品状态随时验证方案
模块内部方法调用方式
非Form提交时的数据验证
//订单模块
Modal式组件封装思想
城市联动操作
复杂表单回填
//支付模块
支付宝支付功能对接
支付状态动态监测
支付成功回执处理
//后台管理
管理后台的实现思路
React框架及组件化
React-Router的使用
//访问数据分析
pv/uv
流量来源监控
用户特征分析
//SEO优化
SEO原理
关键词设计
SEO监控
//线上部署
线上服务器的搭建
自动化脚本编写
域名规划与nginx配置
//可用性监控
外部监控原理
第三方监控设置
更高级监控方式

电商平台需求分析

这里写图片描述

//需求拆分原则
单个迭代不宜太大
需求可交付 ,能够形成功能闭环
有成本意识,遵循二八原则
有预期的价值体现
//提炼核心需求
用户端(展示 购物车 下单 支付 订单 用户)
后台管理(商品管理 品类管理 订单管理 管理员登陆)
//电商功能拆分--用户端
商品 》 首页 商品列表 商品详情
购物车 》 购物车梳理阿哥,添加删除商品 购物车提交
订单 》 订单确认(地址管理),订单提交,订单列表,订单详情
支付 》 支付
用户 》 登陆 注册 个人信息  找回密码 修改密码
//电商功能拆分--管理后台
商品管理 》 添加/编辑商品 查看商品 ,下架
品类管理 》 添加品类 查看品类
订单管理 》 订单列表 订单详情 发货
权限    》 管理员登陆
//参与感
更深入了解业务和需求
丰富其他领域的知识
堤防不靠谱的需求

1-3 架构设计及技术选型

//架构设计--分层架构
定义: 把功能相似 ,抽吸那个级别相近的实现进行分层隔离
优势:松散耦合(易维护 易复用 易扩展)
常见的分层方式: MVC MVVM
//架构设计--模块化
定义:解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程
意义:解耦 可并行开发
模块化方案: AMD CMD CommonJS ES6

这里写图片描述

//技术选型
软件过程

软件过程选择--敏捷开发
定义:以用户需求进化为核心 ,采用迭代,循序渐进的方法进行软甲开发
是一种迭代的意识和方法,而不是概念和工具
优点:能够应对满足不断变化的需求
不足:对团队成员的能力要求比较高

前后端分离

前后端分离方式--不分离
前后端公用一项项目目录,甚至页面内嵌js,css
本地开发环境搭建成本高
共同维护成本高
发布风险高

前后端分离方式--部分分离

后段负责页面模版(JSP/Velocity/Freemarker)
本地开发环境搭建成本较高
更新页面模板仍需要后段协助 ,效率不够高
需要前后端同时发布

前后端分离方式--完全分离1

方案1 :velocity 发布的时候同步到后段
优点 完全分离 ,能直接生成动态的模版,利于SEO
缺点:系统复杂度高 ,需要前后端同时发布

前后端分离方式--完全分离2

方案2 :纯静态html 完全通过接口做数据交互
优点:完全脱离后段模版,系统复杂程度低
缺点:不利于seo
优化方案:Server Render 蜘蛛定制页面



框架

jQuery Angular Avalon Vue React

css Less Sass 

用户端(求稳 用户类多样 有SEO要求 多页应用)选用jQuery css
管理系统(求快 用户类型单一 无SEO要求) 选用 React Sass

构建工具

Grunt Gulp Webpack
选用Webpack

版本控制

svn git
选用git

发布方式

拉取代发布代码 编译大包 发布到线上机器

发布方式--域名规划

html > www./admin.com
js+css > s.
image > img.

技术选型总结

软件过程:敏捷开发
前后端分离: 完全分离,纯静态方式
模块发方案:CommonJS + Webpack
框架选择:用户端jQuery + css 管理系统React
版本控制: git
发布过程:拉去代码 编译打包 发布到线上机器

1-4 前后端配合方式及数据接口定义

前后端配合方式及数据接口的定义

//职责范围

后端(数据存储 文件服务 数据接口)
前端(数据请求 数据处理 页面展示)

//接口文档规范--格式

模板 -- 接口名称
/product.do --接口地址
request  --请求信息
reponse --响应信息

这里写图片描述

接口文档规范–请求和响应

这里写图片描述

2-1开发环境的搭建

语言环境

jQuery Webpack node.js git

node.js简介

定义:js的服务端运行环境
用途:构建工具webpack的环境依赖
特点:单线程,异步编程
应用场景:低运算,高I/O

node.js包管理工具--npm

//git的安装和配置
git简介
介绍:git是一款免费,开源的分布式版本控制系统,用于敏捷搞笑处理任何或大或小的项目

下载地址:https://git-scm.com/download/mac

git常用命令
git init
git commit -am '注释'
git checkout branch
git merge
git pull / git push

git配置 --gitconfig

这里写图片描述

开发工具

sublime Chrome Charles

//sublime 快捷键
cmd + shift + d 复制行
cmd + shift + k 删除行
cmd + ;注释
cmd + w 关闭当前标签
cmd + n 打开新标签
cmd + shift + t 恢复关闭的标签
cmd + d 查找并选择
cmd + f 当前页查找
cmd + shift + f 在文件夹中查找 

3-1 项目初始化基于模块化的脚手架搭建 
3-1-1 项目目录 
3-1-2 项目工具

3-2 项目目录的搭建 
3-2-1git仓库的建立

3-2-1-1git项目建立 
目录结构的设计 
src(page+view service util image) 
dist(View Js Css resource )

登陆码云:https://gitee.com (创建一个新的项目)

1: git clone git@gitee.com:jjsnc/jjsnc.git 
如果出现以下错误 Permission denied (publickey) 需要配置用户名和密码

2 git config –global user.name [username] 
git config –global user.email [email]

3: 如何生成SSH key 
3-1 检查ssh key 是否存在 id_rsa.pub 或 id_dsa.pub 
命令: ls -al ~/.ssh 
3-2:如果没有ssh key 生成新的ssh key (一直点击回车即可)

ssh-keygen -t rsa -C "your_email@example.com" 

3-3 :将ssh key 添加到github 中 
复制:id_rsa.pub文件 里面的文字信息 
Mac 命令:pbcopy < ~/.ssh/id_rsa.pub

目前为止git仓库已经创建完成 
下一步需要把本地的git仓库和远程的关联在一起 
命令: rm-rf jjsnc (删除此文件夹) 
命令:mkdir jjsnc (创建文件夹) 
命令:cd jjsnc (在此文件夹下创建test.html 文件作为测试) 
命令:git init (在jjsnc 目录下进行初始化) 
命令:ls -al (这时候会出现.git 文件夹) 
命令:git remote add origin git@gitee.com:jjsnc/jjsnc.git 
(origin 跟的是项目的ssh) 
命令:git pull origin master (拉取远程服务器上面的master 分支) 
命令:git status (查看当前状态 目前test.html 是为提交状态) 
命令: git add . (把文件追踪上) 
命令:git commit -am ‘这里改动的备注’ (该改动的代码提交) 
命令:git push ( 把本地的东西都推送到远程的服务器上面) 
命令:git push –set-upstream origin master ( 确定推送到远程服务器那个分支上面 ,就第一次推送到远程服务器的时候使用)

//目前为止 本地文件夹和远程的数据库就对应起来了

3-2-1-2git权限配置 
3-2-1-3gitignore的配置

//此文件夹会设置一个规则 被匹配到的文件都不会被跟踪
命令: vim .gitignore (创建此文件)
.gitignore 文件内容
.DS_Store
/node_modules/
/dist/
命令: git status (查看是否.gitignore 文件是否成功)
命令:ls -al (查看所有文件)
命令:touch .DS_Store (创建此文件 测试.gitignore 是否成功)
命令:git status (发现 .DS_Store 并没有被追踪到)

3-2-1-4 git 切换创建分支命令

命令:git checkout -b jjsnc_v1.0 (checkout 是切换分支 -b表示这个分支还没有 总结:创建这个分枝并且切换到这个新创建的分支上)

命令:git branch (查看所有分支 带* 表示当前的分支)

//然后在该分支下面创建 对应src 及其相对应的目录 git 对空文件夹是不进行追踪的

3-3 脚手架搭建

npm init  会生成 package.json 文件
安装依赖包 npm install XXX
卸载依赖包 nom uninstall XXX
参数: -g 
参数 --registry=https://registry.npm.taobao.org

webpack

设计思想 --  require anything (任何需求)
加载方式:各种loader 插件
编译方式:commonjs模块->function 类型模块
官方文档:http://webpack.github.io/docs/

//webpack安装
npm install web pack -g
nom install webpack@1.15.0 --save-dev (当前版本项目依赖)
webpack -v (查看版本)

仅限此项目
为何全局安装不用版本号 (npm 加载原理 会优先使用本地的npm包)
为什么用1.15.0 官网上不是建议升级2.x了?(为何兼容IE8)
什么是 --save-dev? (把安装包的信息 存放在package.json devDependencies 下面)

webpack.config.js
entry:js 的入口文件
externals: 外部依赖的声明
output:目标文件
resolve: 配置别名
module: 各种文件 各种loader
plugins: 插件

Webpack Loaders
html: html-webpack-plugin /html-loader
js: babel-loader + babel-preset-es2015
css:style-loader+ css-loader
image+font :url-loader

Webpack 常用命令

webpack 异步压缩文件
webpack -p 做线上发布时候的压缩打包
webpack --watch 实时监听文件 压缩文件

webpack-dev-server
作用:前端开发服务器
特色:可以在文件改变时,自动刷新浏览器
安装:npm install webpack-dev-server --save-dev
配置:webpack-dev-server/click? http://localhost:8088
实用:webpack-dev-server --port 8088 --inline 

3-4 npm和wbpack 初始化

命令: npm init (一直点击enter)
命令: npm install webpack@1.15.0 --save-dev (安装此项目对应的版本webpack 主要是为了兼容性)

index.js

cats = require('./cats.js');
console.log(cats); 

cats.js 

var cats = ['dave','henry','martha'];
module.exprots = cats;

webpack.config.js

module.exports = {
    entry:'./src/page/index/index.js',
    output: {
        path:'./dist',
        filename:'app.bundle.js'
    }
}

命令:webpack


3-5 webpack 对脚本和样式的处理

//sublime 新插件 
FileHeader 
第一步:command+Shift+p 
第二步:installPackage 
第三步:FileHeader 
实用快捷键:command+option+a 然后enter

js用什么loader 加载? 
官方文档上的例子中entry 只有一个js ,我们有多个怎么办? 
output 里面要分文件夹存放目标文件,怎么设置?

var config = {
    entry:{
        'index' : ['./src/page/index/index.js'],
        'login' : ['./src/page/login/index.js']
    },
    output: {
        path:'./dist',
        filename:'js/[name].js'
    }
};

module.exports = config;

jquery 引入方法?

npm installe jquery --save

var $ = require('jquery');

$('body').html('Hello jQuery'
//这种方式是可以的 但是只是局部不是全局
npm uninstall jquery --save

//全局安装jquery 在index.html 中引入
<script type="text/javascript" src="https://cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>
//在全局引入的基础上 模块化引入jquery
在web pack.config.js 配置 
    externals : {
        'jquery': 'window.jQuery'
    } 

//单页面 模块化引入
var $$= require('jquery');
$$('body').html('hello jquery 这里是全局的函数');    

我想提取公共模块 怎么处理?

CommonsChunkPlugin

var webpack = require('webpack');

    entry:{
        'common' : ['./src/page/common/index.js'],
        'index' : ['./src/page/index/index.js'],
        'login' : ['./src/page/login/index.js']

    },

    plugins:[
       // 独立通用模块到js/base.js
        new webpack.optimize.CommonsChunkPlugin({
            name : 'common',
            filename : 'js/base.js'
        })
    ]

样式使用怎样的loader? 
webpack打包的css怎么独立成单独的文件?

var ExtractTextPlugin   = require('extract-text-webpack-plugin');

    module: {
        loaders: [
            { test: /.css$/, loader: ExtractTextPlugin.extract("style-loader", "css-loader") }
        ]
    },

    plugins: [
        // 独立通用模块到js/base.js
        new webpack.optimize.CommonsChunkPlugin({
            name: 'common',
            filename: 'js/base.js'
        }),
        // 把css单独打包到文件里
        new ExtractTextPlugin("css/[name].css")
    ]

3-6 webpack 对html模版的处理

npm install html-webpack-plugin --save-dev 

/ 获取html-webpack-plugin 参数的方法

var getHtmlConfig = function(name) {
    return {
        template: './src/view/'+name+'.html',
        filename: 'view/'+name+'.html',
        inject: true,
        hash: true,
        chunks: ['common', name] 
//chunks  确定当前页面加载哪些js文件 可以查此插件API

        //html 模版的处理
        new HtmlWebpackPlugin(getHtmlConfig('index')),
        new HtmlWebpackPlugin(getHtmlConfig('login'))


//使用
在src view 新建layout html-head.html 文件

在 src view idnex.html   文件内容添加

 <%= require('html-loader!./layout/html-head.html') %>



npm install html-loader --save-dev

3-7 webpack-对icon-font 和图片的处理

npm install url-loader --save-dev 
npm install file-loader --save-dev

//webpack.config.js loader 配置
{ test: /.(gif|png|jpg|woff|svg|eot|ttf)??.*$/, loader: 'url-loader?limit=100&name=resource/[name].[ext]' }

//css文件路径中注意相对路径层级

3-8 webpack-dev-sertver

npm install webpack-dev-server@1.16.5 --save-dev
//全局安装
sudo npm install webpack-dev-server 

WEBPACK_ENV='dev'  webpack-dev-server --inline --port 8088

3-9 项目初始化代码提交与本章知识总结

git add .
git commit -am '备注'
git push 
git tag tag-dev-initial
git push origin tag-dev-initial

//总结
新建git项目
git权限配置
gitignore配置
文件目录的划分
git分支使用规范

npm 使用

npm初始化
安装 / 卸载npm包
npm常用机制
npm自定义命令的使用

webpack

webopack 设计思想
webpack 编译原理
webpack的安装
wbpack.config.js 进化过程

webpack对脚本的处理

js的loader 
js多入口配置
目标文件按文件类别分别存放
jquery引入方法
提取通用模块

对样式的处理

css文件使用loader
css打包成单独的文件

webpack 对html模版的处理

html-webpack-plugin
多页应用里html的处理
通用html模块的抽离 

webpack对图片和icon-font 处理

静态资源使用loader
url-loader 里参数的配置

ewbpack-dev-server
安装和配置
饮用场景和使用方式
环境变量的设置和读取方法
webpack命令和npm 自定义命令的结合

代码的提交

代码的提交过程
git 的tag用法

5-1 用户模块的设计,功能拆分 加护数据接口分析

用户涉及的页面 
登录

//确定功能点和接口
字段验证 ,通过后提交后段接口
接口成功失败的处理

注册

对用户名异步验证
字段验证,通过后提交后段接口
接口成功失败的处理
接口
判断用户名是否存在的接口
体积哦啊注册的接口    

找回密码

输入密码 获取密码提示问题
输入密码提示问题的答案进行验证
提交修改后的密码
//接口
根据用户名获取密码提示的问题接口
根据用户名,问题和答案获取认证的token接口
根据用户名和认证的token 重置密码接口

个人中心

显示个人信息
个人信息的修改
//接口
获取用户信息接口
修改用户信息接口

修改密码

根据原密码和新密码来更新用户密码
//接口
更新密码的接口

支付宝支付–return_url

这里写图片描述

支付宝支付–notify_url

这里写图片描述

常用seo优化技巧

1:增加页面数量
2:减少页面层级
3:关键词密度
4:高质量友链
5:分析竞对
6:SEO数据监控

访问数据的统计常用指标
访问领 PV UV VV
流量来源
搜索关键词
设备信息

项目上线流程

生产环境配置

安装nodejs
安装webpack
安装ruby && sass
安装 git 并配置权限

发布脚本的编写

拉去最新代码
项目初始化
执行打包编译
复制dist目录到目标目录


nginx和域名的配置


存活监控

监控主战地址
监控第三方内容地址
脚本一场监控,性能监控,自定义监控

免责声明:文章转载自《前后端项目对接流程梳理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Systemd 入门教程:实战篇Runtime error TSV_TNEW_PAGE_ALLOC_FAILED下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

scss 常用语法

点击查看 sass 官方文档 1.编译 初学可以在atom 中编译 安装命令 gem install sass atom中安装atom-sass ,mac 中“control+option+c”,windows中“Alt + Ctrl + c” 监控修改的样式文件; 在终端通过指令控制 sass --watch sass文件夹名:css文件夹名...

iOS的永久存储

iOS中的永久存储也是相对的(以下所讲的永久存储也是如此),在用户不对设备进行恢复或还原操作时,部分数据是可以做到永久存储的(即应用被删除后重新安装数据不会丢失,在替代UUID方法中较为有效)。 几个概念: 1.UUID: (Universally Unique Identifier) 通用唯一标识符,是一个标识符标准用于软件架构,由开放软件基金会(OSF...

Jquery获取列表中的值和input单选、多选框控制选中与取消

一、Jquery获取列表中的值   1、jsp页面代码    <tbody> <c:forEach var="model" items="${listRefEntity }" varStatus="status"> <tr&...

打开Word为什么会出现感叹号呢???

  最近由于要用access,但是新装的机子上只有精装三合一版本的office,所以就在网上下载了个Access2007,安装后发现其他office办公软件打不开,并显示提示窗口”操作系统当前的配置不能运行此应用程序“,当打开Word出现感叹号,如下图所示: 问题分析: 可能Word文件打开方式被改变了,Word文件必须选择默认用Word打开方式才行。W...

git 分支回滚

git代码库回滚: 指的是将代码库某分支退回到以前的某个commit id 【本地代码库回滚】: git reset --hard commit-id :回滚到commit-id,讲commit-id之后提交的commit都去除 git reset --hard HEAD~4:将最近3次的提交回滚 【远程代码库回滚】: 这个是重点要说的内容,过程比本地回滚...

html实现弹框,并伴随遮罩层,且弹框居中

本文介绍的内容主要实现的功能有,出现弹框,并且伴随遮罩层,且弹框一直居中。 html和js代码: <div id="hidebg"></div> <div onClick="hidebox();"> <div> <p class="box-head"...