• Stars
    star
    343
  • Rank 119,353 (Top 3 %)
  • Language
  • Created over 5 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

前端决策树

作为 2019.1.5 SEE Conf 演讲的一部分。

前端的发展真是太快了,子领域很多,然后每个领域的方案也是层出不穷,比如 css-in-js 方案大大小小有 10 几个,数据流方案有数十个。怎么选?

我觉得选方案就是做决策。大到框架是用 react 还是 vue,小到压缩是用 uglifyjs 还是 terserjs,各种选择,眼花缭乱。当然,这里不会告诉你如何选,也不能代替你做决策,因为很多选择其实没有对错,但我觉得没有出现在这里的都可以暂不考虑。

以下是我结合之前的经验做的整理,主体是基于 React 社区。肯定有考虑不周,欢迎 PR 补充。


  • 框架
    • 三大框架里选哪个?
      • react
        • next.js
        • after.js
        • umi
      • angular
      • vue
        • nuxt.js
    • 考虑小程序?
      • 用原生、vue、还是 react 语法?
      • 是否考虑代码共用?
      • 小程序 -> vue|react 还是 vue|react -> 小程序?
  • 语言
    • 引入强类型语言?
      • TypeScript
      • Flow
    • 支持的话,后面所有的流程都需要额外考虑,比如 test、构建、数据流、三方库支持等等
  • CSS
    • 预编译语言选哪个?
      • less
      • sass
      • stylus
    • 如何避免命名冲突?
      • css modules
        • 如何让部分文件不使用 css modules?
      • bem
    • 考虑 css-in-js?
      • styled components
      • emotion
      • radium
      • glamorous
    • 主题、在线换肤?
  • 数据流
    • 数据流选哪个?
      • redux
        • redux 副作用库选哪个?
          • redux-thunk
          • redux-saga
          • redux-observable
        • 要不要用 dva 或 rematch?
        • redux-persistent
      • mobx
        • 要不要上 mobx-state-tree?
      • rxjs
      • ngrx
      • vuex
      • 小而美的 unstated
      • 原生的 context + hooks
  • 构建工具
    • 构建工具选哪个?
      • webpack
        • 怎么配?最佳实践是啥?
        • 如何让使用者扩展 webpack 配置?
          • webpack-chain
          • webpack-merge
        • tree-shaking 是啥?怎么开?
        • svg as component
        • 如何处理 HTML 文件?要不要用 html-webpack-plugin?
        • 如何提速?让启动和构建更快?
          • 基于路由或 entry 的按需编译
          • hard-source-webpack-plugin,有用,但 bug 多
          • externals
          • dll
          • noParse,uglifyjs 的 exclude 配置等
        • 待补充,这里内容太多了。。
      • rollup
      • parcel
      • system-js
    • 压缩
      • JavaScript 压缩用啥?
        • uglifyjs2 - uglifyjs-webpack-plugin
        • uglify-es - terser-webpack-plugin
        • babel-preset-minify
      • CSS 压缩用啥?
        • cssnano
          • cssnano-preset-default 里哪些功能应该关掉?
        • clean-css
    • babel
      • 如何选择合适的 babel preset 和插件?
      • 如何选择必要的语法特性?一些不必要的语法会引入额外的尺寸。
      • 如何选择合适的补丁方案?
        • env + targets 配置
          • 用 entry 还是 usage?
        • transform-runtime + runtime
      • node_modules 要不要编译?
        • 不按规则转成 es5 再发布的 npm 包怎么处理?
          • es5-imcompatible-versions
      • 要不要启用 babel-plugin-macros?
      • 如何写插件实现定制语法修改?
    • AST
      • 用哪套方案?
        • babel 全家桶,parser + traverse + types + template + generator
        • 老牌方案,esprima + escodegen + esquery
      • 要不要考虑封装后的 jscodeshift?
    • SourceMap
    • PostCSS
      • 如何选择合适的插件?
      • autoprefixer
        • 如何保证给 babel 补丁方案的浏览器配置是同一份?
      • 是否启用高清方案?
  • 组件工具
    • 文档工具用哪个?
      • docz
      • storyboard
      • vuepress
    • 同时打包出 cjs、esm、bundled esm、umd 等多种格式
    • 用 rollup 还是封装过的 microbundle?
  • UI 库
    • 选哪个?
      • ant-design
      • material-ui
      • ice
    • 如何按需打包?
      • tree-shaking
      • babel-plugin-import
  • 数据通讯
    • 选哪个请求库?
      • whatwg-fetch
      • axios
    • 如何 mock 数据?
    • 如何代理 API 到后端?
    • 要不要上 graphql?
    • websocket
  • 包管理工具
    • 包管理选哪个?
      • npm
      • yarn
        • 要不要试着开启 Plug'n'Play?
    • 下载慢怎么办?
      • 自搭源服务
      • cnpm
    • 有私有包的需求?
  • 路由
    • 路由选哪个库?
      • react-router 3 | 4
      • reach-router
      • router5
    • 路由采用集中配置式?约定式?还是分布的组件式?
    • 路由功能包含
      • 动态路由
      • 可选的动态路由
      • 嵌套路由
      • 基于路由的权限管理
      • 路由切换动效
      • 基于路由的面包屑
      • 滚动条状态
    • history 用 hash 还是 browser
      • browser 时需额外考虑部署问题
      • query 处理选 qs 还是 query-string
  • 测试
    • 测试框架选哪套?
      • jest 全家桶
      • mocha + istanbul + chai + sinon
    • ui 测试用哪套方案?
      • enzyme + jsdom
      • 官方的 react-test-rerender
      • kentcdodds 的 test-testing-library
    • e2e 测试
      • puppeteer
      • cypress
    • 测试录制回放
    • 数据模拟和准备
  • 工程
    • linters and formatters
      • eslint
        • 配置选哪套?
          • eslint-config-react-app
          • eslint-config-prettier
          • eslint-config-airbnb
          • 自建?
        • 要不要用 prettier?和 eslint 规则的冲突怎么解决?
      • tslint
        • Typescript 校验是用 eslint 还是 tslint?
      • stylelint
    • 目录组织
  • ssr
    • next.js
    • after.js
    • nuxt.js
  • 静态站点
    • gatsby.js
  • 性能优化
    • 是否启用 pwa?怎么用?
      • 手写 service-worker.js
      • workbox
      • 选择哪种缓存策略?
      • PRPL Pattern
    • 基于路由的 code splitting
      • css 该拆还是合?是否应该按需加载?
    • 怎么提取公共部分?
      • vendors 还是 common?
      • minChunks 怎么配?
      • 提一个还是多个?
      • 项目里有几组不同的公共部分时怎么处理?
      • dll 适合作为公共提取方案吗?
    • prefetch
    • critical css
    • rawact(DOM 直出)
    • 更多待补充...
  • 部署
    • 怎么部署到非根目录?
    • 静态文件需要部署到 cdn 时怎么处理?
    • 如何设置运行时的 publicPath?
    • 如何针对 css 配置额外的 publicPath?

如果不想做选择,大家可以考虑封装好的框架,比如 next.jsgatsby 或者 umi

More Repositories

1

awesome-javascript

🐢 A collection of awesome browser-side JavaScript libraries, resources and shiny things.
31,906
star
2

blog

💡
4,501
star
3

roadhog

🐷 Cli tool for creating react apps, configurable version of create-react-app.
JavaScript
2,722
star
4

awesome-f2e-libs

🎉 整理我平时关注的前端库。
1,546
star
5

weekly

MDH Weekly 前端周刊,每周一上午 9 点发布。
TypeScript
1,063
star
6

awesome-tools

Awesome tools I used.
703
star
7

zaobao

570
star
8

esbuild-webpack-plugin

Use esbuild as minifier for webpack.
TypeScript
264
star
9

dva-boilerplate-electron

Yet another boilerplate for dva.
JavaScript
200
star
10

toy-vite

TypeScript
122
star
11

dva-example-react-native

ReactNative example for dva.
Objective-C
94
star
12

dva-boilerplate-typescript

Dva boilerplate for typescript.
TypeScript
83
star
13

example-webpack-mfsu

Start the antd + framer-motion project without cache in one second.
TypeScript
83
star
14

dva-boilerplate-isomorphic

Dva boilerplate for isomorphic.
JavaScript
74
star
15

es3ify-loader

ES3ify loader for webpack.
JavaScript
71
star
16

learn-react-with-umi

Learn react with umi by examples.
JavaScript
46
star
17

ae-html-to-react

一键转换 AE 编译出的 html 动画文件为 React 格式。
TypeScript
39
star
18

react-redux-boilerplate

A boilerplate with react, redux, redux-saga ...
JavaScript
39
star
19

gimi

TypeScript
36
star
20

sorrycc.com

https://sorrycc.com/
TypeScript
29
star
21

ruban

Ruban is a personal tool pack for creating repos.
JavaScript
23
star
22

import-helper

Don't waste time to write import/require statement.
JavaScript
22
star
23

frontend-interview-book-by-chatgpt

frontend-interview-book-by-chatgpt
21
star
24

alfred-douban

Alfred 3 workflow to find movie from douban.
JavaScript
20
star
25

test-federated-modules

JavaScript
19
star
26

url-system

TypeScript
17
star
27

keep-chatgpt-simple

keep-chatgpt-simple
JavaScript
14
star
28

dva-example-antd-mobile

dva example of antd-mobile.
JavaScript
13
star
29

docaid

TypeScript
12
star
30

sorrycc

11
star
31

webp-support

Script to feature detect if browser support WebP.
JavaScript
10
star
32

sekiro

A framework based on umi. (demo only)
JavaScript
10
star
33

wau

Watch and upload.
CoffeeScript
9
star
34

spm-handbook

How to build modular applications with spm.
9
star
35

toy-bundler

toy-bundler
TypeScript
7
star
36

simple-react-boilerplate

JavaScript
7
star
37

pc-mobile-example

TypeScript
7
star
38

chinese-convert-example

TypeScript
5
star
39

generator-spm

A SPM Project generator for Yeoman.
JavaScript
5
star
40

css-resources

Find and replace all *image* and *font* resources in css.
JavaScript
5
star
41

chatgpt-telegram-bot

TypeScript
5
star
42

module-analyze-examples

JavaScript
5
star
43

redux-bind

Higher Order Component for antd to keep ui state in a Redux store.
JavaScript
5
star
44

obsidian-sorrycc

TypeScript
4
star
45

gulp-jsbeautify

js-beautify plugin for gulp
JavaScript
4
star
46

baby

4
star
47

tpsmate-mac

4
star
48

toy-umi

JavaScript
4
star
49

umi-example-monaco-editor

TypeScript
4
star
50

cmdclean

A build tool that converts CMD code to standard JavaScript.
JavaScript
4
star
51

github-helper

Objective-C
4
star
52

magicclone

A magic clone cli for github.
JavaScript
4
star
53

umi-plugin-hello

umi plugin for tutorial.
JavaScript
4
star
54

create-sorrycc

Self-use boilerplates.
JavaScript
3
star
55

require-on-demand

Require package on demand.
JavaScript
3
star
56

ctos

a tool to transform component package to spm@3x package
JavaScript
3
star
57

schema2tsd

编译 Fengdie Schema 为 TypeScript 类型定义文件。
JavaScript
3
star
58

cdeps

Get absolute dependences recursively by entry file, support js and css.
JavaScript
3
star
59

sinew-node

Sinew-Node collects structured data from web sites (screen scraping).
CoffeeScript
2
star
60

cpu-history

JavaScript
2
star
61

test-umi-4-lint

TypeScript
2
star
62

scripts-hook

JavaScript
2
star
63

node-webapp-template-with-coffee

CoffeeScript
2
star
64

electron-redux-boilerplate

Dead simple electron redux boilerplate based on ant-tool.
JavaScript
2
star
65

umi-plugin-sofa

JavaScript
2
star
66

hello-yarn-2

JavaScript
2
star
67

test-gh-pages

JavaScript
2
star
68

seajs-app-sample

JavaScript
2
star
69

test-next-live

TypeScript
2
star
70

feedback.umijs.org

2
star
71

atpl-loader

Webpack loader for anima-template.
Makefile
2
star
72

v3-umijs-org

HTML
2
star
73

umd-bundler

Umd bundler basedon webpack.
JavaScript
2
star
74

test-build-result

JavaScript
2
star
75

babel-core-resolve-enhance

Enhance resolve dirname addable for babel 6 core.
JavaScript
1
star
76

install-dependency

Install dependency with any npm clients.
JavaScript
1
star
77

koa-jsx

koa middleware for transforming jsx of react
JavaScript
1
star
78

images

1
star
79

koa-combo2

Koa middleware for assets combo.
JavaScript
1
star
80

aralejs.index

Source code index for aralejs.
Ruby
1
star
81

npm-github

Open github url in browser by npm pkg name.
JavaScript
1
star
82

gulp-atpl

Gulp plugin for anima-template.
JavaScript
1
star
83

roadhog-example-config-loader

HTML
1
star
84

stepanim

A JavaScript class to do frame animation, just as google logo dose.
JavaScript
1
star
85

test-mfsu-fast-refresh-cpu-100

TypeScript
1
star
86

jest.automockoff

jest.autoMockOff()
JavaScript
1
star
87

md-server

A markdown server for local docs.
CSS
1
star
88

umi-lib-namedExports-problem

JavaScript
1
star
89

markify

JavaScript
1
star
90

dva-tutorial

JavaScript
1
star
91

test-release

1
star
92

robot

A robot that get information automatically for you per week.
JavaScript
1
star
93

examples

JavaScript
1
star