Home

Awesome

ToFun

欢迎来到tofun!🙃<br> 我们是一个极简的匿名留言板应用,Material风格!🍉<br> 你可以在留言板吐槽🍓,也可以当跨平台便签使用🥝. ⛷⛷⛷Enjoy it...

需求配置

开始

确认好你的环境配置,然后就可以开始以下步骤。

$ npm install                   # 安装项目依赖
$ npm start                     # 编译和运行

开发过程中,你用得最多的会是npm start,但是这里还有很多其它的处理:

npm run <script>解释
start服务启动在localhost:9013,代码热替换开启。
compile编译程序到dist目录下(默认目录~/dist)。
clean删除dist文件夹。
lint检查所有.js文件语法规范。
build启动代码检查,测试,如果成功,编译到 dist 目录下。NODE_ENV值为"production"。
build:devbuild相同,但是NODE_ENV值为"development"。
build:testbuild相同,但是NODE_ENV值为"test"。
build:uatbuild相同,但是NODE_ENV值为"uat"。
deploy部署到生产环境。
deploy:test部署到测试环境。
deploy:uat部署到UAT环境。

依赖

dependencies:

名称解释
antd淘宝react-UI组件库。更多
antd-mobile淘宝react-mobile-UI组件库。更多
babel-loaderBabel是编写下一代JavaScript的编译器。更多
babel-plugin-transform-runtime对帮助程序和内置程序的外部引用,自动聚合到代码,而不污染全局。更多
babel-polyfillbabel转码规则。更多
babel-preset-es2015ES2015转码规则。更多
babel-preset-reactreact转码规则。更多
babel-preset-stage-0stage-0转码规则。更多
babel-runtime代码优化。更多
better-npm-run可自定义您项目的 npm 脚本。更多
cssnano一个模块化的压缩器,构建在PostCSS生态系统之上。更多
debugnode.js 下的调试器。更多
es6-promise一个轻量级库,提供用于组织异步代码的工具。更多
extract-text-webpack-pluginwebpack解压缩用。更多
fs-extranode.js 命令行扩展。更多
html-webpack-pluginwebpack创建HTML文件插件。更多
isomorphic-fetchfetch API for node 和浏览器。更多
ipIP地址实用程序。更多
less动态css。更多
lodashlodash库。更多
momentmoment库(格式化时间用)。更多
react-spinkitreact加载动画组件库。更多
reactreact库。更多
react-domreact-dom库。更多
react-modulesreact-redux库。更多
react-routerreact-router库。更多
modulesredux库更多
webpack前端打包工具更多
yargs命令行扩展更多
rimrafnode环境下一个深度删除文件模块更多
***-loader各种加载器。更多
postcss-pxtorem可以将css文件的px单位转化为rem单位的插件。更多

devDependencies:

名称解释
expressnode.js web服务框架。更多
babel-corebabel编译器。更多
babel-eslintbabel语法检查器。更多
babel-plugin-istanbul代码测试插件。更多
enzymeairbnb的React的测试库。更多
eslintjavascript代码规范检查。更多
eslint-config-standardjavascript标准配置。更多
eslint-config-standard-reactreact标准配置。更多
eslint-plugin-babeleslint规则插件。更多
eslint-plugin-promiseeslint规则插件。更多
eslint-plugin-reacteslint规则插件。更多
eslint-plugin-standardeslint规则插件。更多
connect-history-api-fallback利用history-api使所有的路由都直接指向index.html文件。更多
karma单元测试。更多
karma-coverage单元测试。更多
karma-mocha单元测试。更多
karma-mocha-reporter单元测试。更多
karma-plantomjs-launcher单元测试。更多
karma-webpack-with-fast-source-map单元测试。更多
mocha单元测试。更多
nodemon监控node应用的变化,重启node服务,测试环境使用。更多
plantomjs-prebuiltnode环境下一个无界面webkit浏览器,用于测试。更多
react-addons-test-utilsreact测试附属组件。更多
redbox-reactreact报红抛出错误的组件。更多
webpack-dev-middleware用于开发的webpack中间件。更多
webpack-hot-middlewarewebpack热插拔中间件。(用于开发环境)更多

项目结构

这个项目的结构使用的是 fractal(不规则碎片形:适合大型项目),分组主要是依照特性而不是文件类型。这种结构谐在让程序更容易扩展,想了解更多请点击这里

.
├── bin                         # 启动脚本和编译脚本
├── dist                        # 发版文件
├── build                       # shell 脚本
├── config                      # 项目配置文件
│   ├── api                     # 相关模块 Api 请求地址
│   ├── data                    # 相关配置
│   │   ├── maintain.js         # 站点维护配置
│   │   └── env.js              # Api环境配置
│   ├── lib                     # 第三方配置(包含webpack打包配置)
│   │   ├── env.config.js       # 默认环境配置
│   │   ├── webpack-complier.js # webpack编译函数
│   │   └── webpack.config.js   # webpack配置
│   └── config.js               # 相关配置处理
├── node_modules                # 项目依赖
├── server                      # Express 程序 (使用 webpack 中间件)
│   └── app.js                  # 服务端程序入口文件
├── src                         # 程序源文件
│   ├── app.js                  # 程序启动和渲染
│   ├── index.html              # web页面入口
│   ├── components              # 全局可复用的表现组件
│   ├── containers              # 全局可复用的容器组件
│   ├── modules                 # 可复用组件的reducers/actions的集合
│   ├── layouts                 # 主页结构
│   ├── assets                  # Redux指定块
│   │   ├── img                 # 静态图片资源
│   │   ├── css                 # 公共样式
│   │   └── utils               # js公共方法
│   ├── store                   # Redux指定块
│   │   ├── createStore.js      # 创建和使用redux store
│   │   ├── location.js         # location 的action 和 reducer
│   │   └── reducers.js         # Reducer注册和注入
│   └── routes                  # 主路由和异步分割点
│       ├── index.js            # react路由配置文件
│       ├── Root.js             # providers包住组件,注入store 和 routes
│       └── Home                # 不规则路由
│           ├── index.js        # 路由定义和代码异步分割
│           ├── assets          # 组件引入的静态资源
│           ├── components      # 直观React组件
│           ├── containers      # 连接actions和store
│           ├── modules         # reducers/actions的集合
│           └── routes **       # 不规则子路由(** 可选择的)
├── package.json                # 项目信息文件
└── tests                       # 单元测试

样式

所有的css和less都支持会被预处理。只要被引入,都会经过PostCSS压缩,加前缀,所有px单位都会转换成rem单位。 编写css的时候,样式值都写成和视觉稿上标注的值(视觉稿标注一般以设备物理点为单位,像 iPhone6 屏幕 750 的宽度)一样即可。 index.html中会嵌入一段脚本代码,设置html的font-size根值为100px。 样式表在生产环境下会提取到一个css文件下。

加载动画

加载动画引用react-spinkit。使用方法:

var Spinner = require('react-spinkit');
<Spinner spinnerName='double-bounce' />

本地调试

这个项目的服务端使用express。需要注意的是,只有一个目的那就是提供了webpack-dev-middlewarewebpack-hot-middleware(代码热替换)。使用自定义的express程序替换webpack-dev-server,让它更容易实现universal 渲染和为了不使这个包过于庞大。

打包优化

Babel被配置babel-plugin-transform-runtime可以让代码更优化。另外,在生产环境,我们使用react-optimize来优化React代码。 在生产环境下,webpack会导出一个css文件并压缩Javascript,并把js模块优化到最好的性能。

静态部署

如果你正在使用nginx处理程序,确保所有的路由都直接指向 ~/dist/index.html 文件,然后让react-router处理剩下的事。如果你不是很确定应该怎么做,文档在这里。Express在脚手架中用于扩展服务和代理API,或者其它你想要做的事,这完全取决于你。

Thanks you guys all the time.