nextlevel
v0.0.1nextlevel
A month ago, my colleague Mario Scheliga asked me what goals I wanted to achieve before the year ends. I told him I wanted to level up my build tool skills. So in my free time, I started defining what “leveling up my build tool skills” meant. After doing some experimentation & research with him, I wrote out a list:
monorepo
- [~] modularized lerna monorepo
- travis + docker staging deploying (with only one easy command, deploy at will, simultaneous or sequentially)
- flowtypes (reusable across projects) -> [x] cli test running
- eslint (reusable across projects)
- aliasing, helpers, async startups across projects
- benchmarks
backend
- express 5
- nodejs 6.9.1
- nodejs 7.1
- [~] (simultaneous) hot reloading dev+test server(s) in one cli (works but haven’t added second backend)
- es6 + webpack2 + babel
- point cut routing setup
- [~] hot route analysis to be used for code chunking least|most used routes
- sharable di & configs
frontend
- hot reloading 3
- point cut routing setup
- react 15.4.1 & react router 4~
- es6 + webpack2 + babel
- jsdom + enzyme + mocha test suite
- preact for development & production
step 1
- set up build system (resolve with helpers etc)
- make test pass
- run webpack when testing, keep it in memory, that we we don't have to build every time? (more difficult than it seems)
- how to do backend with es6
- can do express routes with plugins as well?
- config & db should be on DI
- run test suite with mocha + webpack + babel (more difficult than it seems)
- load plugins in nodejs (more difficult than it seems)
- eslint plugin setup
step 2
- set up configs extending each other
- ensure lerna works properly
step 3
- knexdb setup migrations - could just use pg straight up no knex #noknex (opted for couchdb b/c ease of use)
- set up running server with webpack & running built system
- use babel6
- uglify production
- uglify front end production
- reuse configs
- fix
WARNING in ... Critical dependencies: ... require function is used in a way in which dependencies cannot be statically extracted
- add backend hot reloading SERVER setup
step 4
- use webpack 2
- add flowtypes initially for documentation only
- test flowtypes
- add hot reloading 3
- add tests to front end
- route logging & detecting hot routes for automatic code chunking the hot routes (pt 1 middleware logging)
step 5
- add react routing
- add a component as a route
- use react router 4
- base babel query loader generator
- simplify xtpoint invokation
step 7
- make xtpoint invokation safe - might need to add another function EITHER
add flag to.point(ns, context)
add methodinvokeFor
add methodapply
-> would require changing exec too (could doapplyExec
)- change the signature, if first argument is object it is the context <- THIS
- async wrapper IN xtpoint invoking routing wrapper? like in whitelists
- reusable core for both backends -> split CONFIGS
step 8
- fix .gitignore RTFM
- read about lerna/monorepo deployment
step 9
- benchmarks for backend
- real benchmarks
- fix tests not stopping watching on their own
step 10
- write a blog post
step 11
- add custom syntax with sweet.js 2
- add a custom webpack loader for it
- express 5
- eslint flowtypes
- build sweetjs files from .sjs to .js before the rest
- maybe add an atom plugin for compiling and saving sugarjs files on save like so many do with CoffeeScript
next steps
- worker
- i18n
- docker
- package manager
- move reusable deps like underscore to root (issue with lerna)
- later, add second backend
- test code coverage