Atomic web development - Combining the power of npm, Browserify, Rework and more to build small, fully encapsulated client side modules
There is a standalone virtual dom library from matt esch.
Hyperscript is a pretty interesting library and a "virtual dom" version exists:
There are also some modules to use stream for updating the dom that i like a lot
You said earlier:
@joeybaker
possible, but I’m inclined to think that it’s to complex to have that many children?
why is the title and sidebar a part of this component?
and when i described stuff in more detail
@joeybaker
totally agreed there!
I guess that API you should would be for a “page” or some such?
I would actually like to brainstorm about a component interface that enables everything in a page to be a component.
The most "top level" components could be different kinds of "webpageComponents" (which set meta-tags
, html
, head
, body
, css-reset
and a lot of other things) so people could have something like:
<body><script="bundle.js"></script></body>
var webpage = require('webpage'); // encapsulates best practice boilerplate for certain kinds of projects
var webpageAPI = webpage({
container: document.body,
options: {/* some configuration depending on the project that should be built*/},
data: {/* some webpage specific data or e.g. RESTful endpoints to fetch the data */},
children: { /* inject some components to be used to render page in detail - if not provided might fallback to default components */}
});
/* Below the "webpageAPI" might be used to interact with the page or register some listeners to react on certain things */
I'm thinking of using leveldb
(a version that wraps indexdb
) to cache everything on the client side and potentially replicate with a remote leveldb
if provided in options
. A nice thing is, that leveldb
has a library sublevel
to provide a leveldb
interface to a subset of data in the database. This could be "passed down" into certain components in the DOM tree. Furthermore, I'm thinking of using BEM conventions in css and templates for all components and to mark "insertion points" for injected components from the "children: {..}" parameter.
componentAPI
?I'm not sure if the atomify chat is the right place to discuss these things, but I really enjoy the feedback from you and whether you imagine this kind of approach would be of any value or not (perhaps because there is already plenty of stuff out there that covers what i'm trying to achieve)
atomify init
option as an alternative to npm init
, that generates a "package.json" file with default values for the atomify configuration
. I'm currently tryin to found a coding school for kids and might teach them atomify. I'm basically copy&pasting always the same atomify configuration
from one project to the next - a init
option would be neat.
process.env.NODE_ENV
"atomify": {
"server": {
"open": true,
"path": "index.html",
"lr": {
"verbose": true,
"quiet": false,
"port": 31337,
"sync": true
}
},
"js": {
"entry": "SOURCE/index.js",
"alias": "BUNDLE/bundle.js",
"output": "BUNDLE/bundle.js",
"debug": true,
"watch": true,
"transform": [
"babelify"
],
"standalone": "API"
},
"css": {
"entry": "SOURCE/index.css",
"alias": "BUNDLE/bundle.css",
"output": "BUNDLE/bundle.css",
"debug": true,
"watch": true,
"autoprefixer": {
"browsers": [
"> 1%",
"IE 7"
],
"cascade": false
},
"compress": false,
"plugin": []
},
"assets": {
"dest": "BUNDLE/assets/",
"prefix": "/BUNDLE/assets/",
"retainName": false
}
}
package.json
. I would really like to avoid yet another file, e.g. atomify.json
in my repository, but I'm also afraid of making the package.json
file even bigger.
atomify
being used by dependencies
of my module (e.g. recursive application of atomify to dependencies using their configuration) - is:
cli tool
, maybe called atomify-serapath
or maybe just foobar
and all it does is to require('atomify')
and feed it my custom params and standard config files and standard dev
, prod
or test
options. Of course, when creating atomify-serapath
it's up to me whether I read that stuff from my package.json
or create a seperate file or whatever... ...but that way I can hide all the config stuff that already became my personal standard or boilerplate inside of the cutom atomify-serapath
module (and/or cli-tool)
atomify-serapath
module could use pure atomify
modules as dependencies and atomify
modules could use atomify-serapath
modules as dependencies. I imagine the former part to be easy, but in order to make the latter part happen, it might require some conventions, so atomify
knows what to do in case it encounters an atomify-serapath dependency
:-)