You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Mar 27, 2019. It is now read-only.
Component is still pretty close to my heart (and we still rely on it for our build at anyroad/anyguide) so I wanted to share something with whoever's still out there. I dunno if this better lives on component/builder2 but it feels like a more general thing.
I was banging my head last night to figure out how to make our components behave like regular node_modules. Mostly because we use React and I would love to test our components with Jest but that required them to be valid node modules.
And I knew that was possible having CommonJS all around + having had this merged which allows for more semantic, path based locals.
What I ended up doing is creating another step to my build, which based on the component dependency tree, I create dummynode_modules folders inside of every local component and vendor dependency which contain symlinks to other components or vendor dependencies made in such a way that it's requires resolve correctly wether it's in the component.js build step or just firing up node.
So we can imagine that we have a component named views/ui/form/location_input which has a dependency on views/ui/icon and components/react @ v0.12.2. The node_modules folder for the component will have a views folder, which has a ui folder which has an icon symlink to views/ui/icon, and then it will have a react symlink to something like vendor/components/react/0.12.2. The name of the symlink will be based on the node.name of the component as defined in component.json to match the way we require it.
Hey guys,
Component is still pretty close to my heart (and we still rely on it for our build at anyroad/anyguide) so I wanted to share something with whoever's still out there. I dunno if this better lives on component/builder2 but it feels like a more general thing.
I was banging my head last night to figure out how to make our components behave like regular
node_modules
. Mostly because we use React and I would love to test our components with Jest but that required them to be valid node modules.And I knew that was possible having CommonJS all around + having had this merged which allows for more semantic, path based locals.
What I ended up doing is creating another step to my build, which based on the component dependency tree, I create dummy
node_modules
folders inside of every local component and vendor dependency which contain symlinks to other components or vendor dependencies made in such a way that it's requires resolve correctly wether it's in thecomponent.js
build step or just firing upnode
.The builder step looks like this: https://gist.github.com/bogdan-dumitru/35069f835b7b34bc1b88
So we can imagine that we have a component named
views/ui/form/location_input
which has a dependency onviews/ui/icon
andcomponents/react @ v0.12.2
. Thenode_modules
folder for the component will have aviews
folder, which has aui
folder which has anicon
symlink toviews/ui/icon
, and then it will have areact
symlink to something likevendor/components/react/0.12.2
. The name of the symlink will be based on thenode.name
of the component as defined incomponent.json
to match the way we require it.Here's an example of my initial testing on this: https://www.evernote.com/shard/s254/sh/d873b312-210f-4cc6-b773-0a4d05710ff4/42ec5dfbd7db3e4bdfd191b34f723975
And here's my first happy Jest test 😄 https://s3.amazonaws.com/uploads.hipchat.com/33904/562391/jCO1AOLYV8Q7Amc/Screen%20Shot%202015-01-15%20at%202.56.03%20PM.png
Was curious what you guys thing about this, but I wanted to share it in case it might be valuable for anybody.
The text was updated successfully, but these errors were encountered: