在线商城Java项目(第二阶段)-前端
可在电脑上阅读,以获取最佳阅读效果,谢谢!
已支持在线查看PDF电子书版本
项目开始 20171216
结束时间 20171223
Git代码地址:https://gitee.com/jiangjiesheng/mmall_fe/tree/v1.0
https://gitee.com/jiangjiesheng/mmall_admin/tree/v1.0
点击在线阅读PDF电子书版本(无需下载)
目录
一、架构设计
1、分层架构
2、模块化
3、架构设计
4、技术选型
二、开发环境搭建
三、Gitee项目初始化
四、创建本地项目结构
五、相关工具包介绍
六、项目基本配置及各种loader安装
1、安装css loader
2、安装css单独打包
3、安装html-webpack-plugin (html模板的处理)
4、安装html loader
5、安装url-loader
6、安装webpack-dev-server
七、业务代码
八、Linux线上环境发布
九、云监控
一、架构设计
1、分层架构
定义:把功能相似,抽象级别相近的实现进行分层隔离
优势:松散耦合,(易维护、易复用、易扩展)
常见分层方式:MVC、MVVM
2、模块化
定义:解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程
意义:解耦、可并行开发
模块化开发方案:AMD、CMD、CommonJS、ES6
3、架构设计
逻辑层: 主模块(子模块、子模块、子模块)
数据层:Service--->对接服务器
工具层:工具
4、技术选型
软件过程、前后端分离、构建工具、框架、版本控制、发布方式
软件过程:
敏捷开发:以用户的需求进化为核心、采用迭代、循序渐进的方式进行软件开发
是一种迭代的意识和方法、而不是概览和工具
优点:能够应对满足不断变化的需求
缺点:对团队成员的能力要求比较高
前后端分离:本地开发环境搭建成本高、共同维护成功高、发布风险高
方案:纯静态html、完全通过接口做数据交互
优点:完全脱离了后端模板,系统复杂度低
缺点:不太利于SEO
优化方案:Server Rander/蜘蛛定制页面
框架选型:
用户端:
特点:求稳 用户类型多样 有SEO要求,多页应用
方案:jQuery+原生CSS
管理端:
特点:求快 用户类型单一 无SEO要求
方案:React+Sass
构建工具:Grunt(太过复杂) Gulp Webpack(支持Commonjs)
方案:Webpack
版本控制:Git
发布方式:拉取待发布代码-->编译打包-->发布到线上机器
域名分布:
html ---> www./admin.
js+css ---> s.
image ---> img.
二、开发环境搭建
1、nodejs简介
定义:js的服务端运行环境
用途:构建工具webpack的环境依赖
特点:单线程、异步编程
应用场景:低运算、高I/O(webui、游戏、在线聊天,作为网络连接的中间件)
nodejs的包管理工具-npm(nodejs package manager)
nodejs安装:【安装A】
官网 nodejs.org https://nodejs.org/download/release/v4.4.7/
Mac:node-vxxx.pkg
https://nodejs.org/download/release/v4.4.7/node-v4.4.7.pkg
windows:node-vxxx-msi (如果64位安装有问题,可以换成32位)
https://nodejs.org/download/release/v4.4.7/node-v4.4.7-x64.msi
LInux:node-vxxx-linux-x64.tar.gz
https://nodejs.org/download/release/v4.4.7/node-v4.4.7-linux-x64.tar.gz
①ln -s /app/software/nodejs/bin/npm /usr/local/bin/
②ln -s /app/software/nodejs/bin/node /usr/local/bin/
测试:node -v(之前已经打开的cmd窗口要先关闭)
2、git安装【安装B】
注意可以在.gitconfig中添加默认的[user]、[alias]、[push]
本机已安装git,相关安装见《在线商城Java项目(第一阶段)-服务端(环境和业务)》
Windows下查看Git安装路径 where git
Linux下查看安装路径 whereis git
3、sublime使用技巧【安装C】
轻量级、运行速度快、支持多光标操作、扩展性良好
sublime常用设置:
Sublime Text -> Preferences -> Setting-User
{
"font-size":18,
"tab-size":4,
"translate_tabs_to_spaces":true,
"update_check":false
}
快捷键:
ctrl shift d 复制行
ctrl shift k 删除行
ctrl ;注释
ctrl d 查找并选择
ctrl shift f 在文件夹红查找
4、代理软件
相关信息见
《js-跨域请求-jsonp-header-服务器代理-Asp.NET配置跨域访问-跨域处理的4种方式总
结》
三、项目初始化
1、目录结构的设计
page + view view
service js
src => => dist =>
util css
image resource
2、搭建git仓库
先在gitee的个人中心的左边的“组织”新建组织
https://gitee.com/jiangjiesheng-com-mmall
将https://gitee.com/jiangjiesheng/mmall后台项目在项目主页的“管理”中添加到组织中
然后在https://gitee.com/organizations/jiangjiesheng-com-mmall/projects的“项目”上
点击+号,新建前端项目mmall-front
(这里不用组织,后台项目转移到组织后会导致之前后台项目的链接都不能使用,创建原地
址项目mmall后重新push后台项目到v1.0,然后切换本地分支git checkout master,强制
提交到git的主干上 git push -u -f origin master,然后本地重新切回到v1.0,
git checkout v1.0,最后删除git组织)
删除组织重新新建项目mmall-fe(front_end)
3、git项目初始化后,复制SSH协议(不用重复的输入账号密码)的链接
到本地sublime专用文件夹,不要创建项目文件夹,直接右击打开Git Bash Here,
执行 git clone git@gitee.com:jiangjiesheng/mmall_fe.git
即可。
touch t.txt 后提交到git测试(这时是master主干)
查看本地分支
git branch
查看远程分支
git branch -r
在本地主干分支的基础上创建分支v.10
git checkout -b v1.0 origin/master (origin/master应该可以省略)
touch v1.0.txt 后
git push后提示:
fatal: The upstream branch of your current branch does not match
the name of your current branch. To push to the upstream branch
on the remote, use
git push origin HEAD:master
To push to the branch of the same name on the remote, use
git push origin v1.0
To choose either option permanently, see push.default in 'git help config'.
可以选择提示中两条语句按照需要执行,也可以执行:
git push origin HEAD -u (创建新分支后首次push)
修改文件后再次提交
git push即可
以上都是先从远程初始化好git仓库后再关联到本地项目的
还可以先创建本地项目,然后把本地项目关联到远端仓库
关联本地项目到远程git仓库:
touch mmall_fe
cd mmall_fe
touch text.html
git init
ls -la
复制出远端git项目的SSH地址 git@gitee.com:jiangjiesheng/mmall_fe.git
git remote add origin git@gitee.com:jiangjiesheng/mmall_fe.git
git pull origin master (拉取远程分支)
git status
显示本地有之前新创建的test.html
即可
注:git commit -am “” ,a表示全部,m表示注释
配置.gitignore文件
git checkout master (切回主干,不确定有没有必要,没有必要)
vi .gitignore
.DS_Store
/node_modules/
/dist/
提交 .gitignore文件
四、创建本地项目结构
cd mmall_fe --> git checkout v1.0 --> mkdir src --> cd src --> mkdir view(page service util)
这时候git status,提示没有文件变动,可能是git不对空文件夹监控(如果有一个空文件夹时,
git status 就可能显示)
五、相关工具包介绍
首先安装node.js
1> npm init
npm init --> 生成package.json
(init这步可以在git bash中操作,cd 到项目文件夹上,输入必要的信息)
安装依赖包 npm install xxx@v.v.v
(参数 -g 表示全局安装,参数 --registry=https://registry.npm.taobao.org)
删除依赖包 npm uninstall xxx@v.v.v
2> Webpack
设计思想:require anything
加载方式:各种loader插件
编译方式:commonjs模块 -> function类型模块
官方文档:http://webpack.github.io/docs/
安装(可在git bash或cmd中操作):
npm install webpack -g //实际编译会有问题
npm install webpack@1.15.0 --save-dev (不建议设计2.x,在IE8下会报错)
以上两步都执行一下
特别注意:以上命令可能会出错
全局安装webpack v^1.15.0
命令: (sudo) npm install -g webpack@^1.15.0【安装D】
webpack -v
//--save-dev 会自动将依赖写入package.json
webpack.config.js(手动创建 https://zhuanlan.zhihu.com/p/24108353)
entry:js的入口文件
external:外部依赖的声明
output:目标文件
resolve:配置别名
module:各种文件、各种loader
plugin:插件
Webpack 各种 Loaders
html:html-webpack-plugin / html-loader
js:label-loader + babel-preset-es2015
css:style-loader + css-loader
image+font:url+loader
Webpack常用命令
webpack
webpack -p (压缩:用于线上发布)
webpack --watch(监听文件改动,自动编译,用于开发过程)
webpack --config webpack.config.js
Webpack-dev-server
作用:前端开发服务器(文件改动时,自动刷新浏览器)
安装:npm install webpack-dev-server --save-dev 【安装D2】
配置:webpack-dev-server/client?http://localhost:8080
使用:webpack-dev-server --port 8088 --inline
webpack对脚本和样式的处理
首选安装一下sublime插件FileHeader
https://www.cnblogs.com/vince-cup/p/5763801.html
使用方式 Ctrl+Shift+A
六、项目基本配置及各种loader安装
npm init完成后且手动创建并配置webpack.config.js后
直接打包测试webpack
安装jquery:npm install jquery --save
在js中引入jquery,var $ = require('jquery');
但是这里引入的jq不是全局可用的,还是使用jq cdn地址(2.0以上版本对IE8不支持)
<script src="https://cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>
提取公共模块:
http://webpack.github.io/docs/list-of-plugins.html
ctrl F 搜索 CommonsChunkPlugin
"use strict";
设立"严格模式"的目的:错误检测、规范、效率、安全、面向未来
- 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
- 消除代码运行的一些不安全之处,保证代码运行的安全;
- 提高编译器效率,增加运行速度;
- 为未来新版本的Javascript做好铺垫。
安装css loader
npm install css-loader style-loader --save-dev【安装E】
安装css单独打包
npm install extract-text-webpack-plugin --save-dev
http://www.jianshu.com/p/439764e3eff2
安装报错
https://github.com/webpack-contrib/extract-text-webpack-plugin
进入分支旁边的Tags可以看到历史版本
npm install extract-text-webpack-plugin@1.0.1 --save-dev【安装F】
安装html-webpack-plugin//html模板的处理
npm install html-webpack-plugin --save-dev【安装G】
https://www.npmjs.com/package/html-webpack-plugin
搜索Installation(webpack.config.js配置相关)
安装html loader
npm install html-loader --save-dev【安装H】
使用时要注意
<%=require('html-loader!./layout/html-head.html') %>
要加上html-loader!
安装url-loader
npm install url-loader --save-dev
https://github.com/webpack-contrib/url-loader
如果提示报错
https://segmentfault.com/q/1010000011516676/a-1020000011553779
可以先安装低版本的file-loader
npm install file-loader@0.11.1 --save-dev【安装I】
或者在package.json中添加 (未测试)
"peerDependencies": {
"webpack": ">=1.3.0 <3 || ^1.15.0"
}
然后重新执行npm install url-loader --save-dev即可 【安装J】
安装webpack-dev-server(实时渲染)
npm install webpack-dev-server@1.16.5 -g
参数改成-g失败,使用--save-dev
npm install webpack-dev-server@1.16.5 --save-dev【安装K】
(如果在unix系统提示文件不存在,加sudo)
https://github.com/webpack/webpack-dev-server/
启动
webpack-dev-server
找到提示的地址 http://localhost:8080/webpack-dev-server/
打开后发现会有iframe嵌套
修改配置文件中的entry入口
webpack-dev-server --inline --port 8088
http://localhost:8088
设置开发环境配置参数WEBPACK_ENV
Linux下启动(或者可在git bash中)
WEBPACK_ENV=dev webpack-dev-server --inline --port 8088
WEBPACK_ENV=online -p
在package.json中写入启动脚本命令(含有windows下命令)
"scripts": {
"dev":" WEBPACK_ENV=dev webpack-dev-server --inline --port 8088",
"dev_win":"set WEBPACK_ENV=dev && webpack-dev-server --inline --port 8088",
"dist":" WEBPACK_ENV=online webpack -p",
"dist_win":"set WEBPACK_ENV=online && webpack -p"
},
命令行启动 npm run dev (注意:这里在windows下,即使使用git bash也会启动失败)
而是要使用 npm run dev_win (dev_win 可换成dist_win)
以上都完成后提交到git上
并打一个tag,打tag一般用于更新大版本时
git tag tag-dev-initial
git push origin tag-dev-initial
可以在线上分支切换中看到标签,github也是类似的位置
七、业务代码
由于前端项目不是重点,这里不再做具体记录,除非有重点内容
1> encodeURIComponent 处理url含有特殊编码时可能被截断
2> 安装hogan(渲染html)
npm install hogan --save 【安装L】
效果:
var html ="<div>{{data}}</div>";
var d ={
data:123
}
console.log(_mm.renderHtml(html,d)); //<div>123</div>
3> 安装npm install font-awesome --save(图标字体库)【安装M】
//引入要注意全路径 require('node_modules/font-awesome/css/font-awesome.min.css')
(比较特殊)
框架、页面基本样式模板、js基本工具处理完成-2017171221
后台项目地址(启动方法见《README.md》)
https://gitee.com/jiangjiesheng/mmall_admin/tree/v1.0/
sass安装:
checking for Python executable "python2" in the PATH
http://blog.csdn.net/xuyunfei_2012/article/details/54574203
八、Linux线上环境发布
1> 安装node.js
wget https://nodejs.org/download/release/v4.4.7/node-v4.4.7-linux-x64.tar.gz
解压到/usr/mylibs 文件夹下
并bin文件夹配置到/etc/profile并source /etc/profile
注意 (不同环境变量之间使用:连接,连接要加上$符号)
export NODE_PATH=/usr/mylibs/node-v4.4.7-linux-x64
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_PATH/bin:$NODE_PATH/bin
退出node编辑环境:Ctrl+D或者Ctrl+C两次
2> 安装webpack
npm install webpack -g --registry=https://registry.npm.taobao.org
webpack -v 查看版本
3> 安装ruby
sudo yum -y install ruby
ruby -v 查看版本
4> 安装sass
sudo gem install sass --no-user-install
或者
yum install rubygems
sudo su -c "gem install sass"
安装出错:
mkmf.rb can't find header files for ruby at /usr/share/include/ruby.h
如果是在centos等系统下面,执行命令:yum install ruby-devel
如果是在Ubuntu等系统下面,执行命令:apt-get isntall ruby-dev
后再次执行安装命令
sass -v 查看版本
5> 自动化发布
cd /developer/git-repository/
git clone git@gitee.com:jiangjiesheng/mmall_fe.git
git clone git@gitee.com:jiangjiesheng/mmall_admin.git
cd mmall_fe
git checkout v1.0
npm install --registry=https://registry.npm.taobao.org
npm run dist (或者 webpack)
看看能不能打包成功,生成dist
cd mmall_admin
git checkout v1.0
npm install --registry=https://registry.npm.taobao.org
npm run dist (或者 webpack)
看看能不能打包成功,生成dist
cd /product
mkdir frontend
cd /frontend
mkdir mmall_fe
mkdir mmall_admin
cp -R /developer/git-repository/mmall_fe/dist/ ./mmall_fe/
自动化发布脚本
后台的发布脚本 在 cd /home/admin/mylibs ,现在也放在developer/git-repository/
九、云监控
https://cloudmonitor.console.aliyun.com/?spm=5176.200021.0.0.gqk7Sc#/sites/
站点管理--添加监控点
mmall_front_all-本地项目-前端和后台管理页面结束-2017171221
npm 打包失败处理
----------------180305最新出错解决方案-----------------------------------
Error: Cannot find module 'webpack'
再安装一遍 npm install -g webpack@^1.15.0
ERROR in ./src/util/mm.js
Module not found: Error: Cannot resolve module 'hogan.js' in D:\workspace\sublime\mmall_fe\src\util
@ ./src/util/mm.js 12:12-31
npm install hogan --save
npm install font-awesome --save
npm run dev_win
提示webpack:fialed to compile 似乎也能访问
(npm run dist_win 不会启动webpack-dev-server)
windows环境打包出错
提示 set WEBPACK_ENV=dev && webpack-dev-server --port 8088 --inline 有错误
https://segmentfault.com/q/1010000012943398
在任务管理中终止node.exe 进程即可
windows环境查看占用端口的进程
netstat -aon | findstr "8088" // 注意加双引号
tasklist | findstr "PID号" // 注意加双引号