[{"data":1,"prerenderedAt":521},["ShallowReactive",2],{"project-8208595":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":35,"aspects":36,"strip":47,"post_text":50,"what":51,"said":85,"maker_in_thread":229,"shape":236,"grid":241,"attempts":483,"same_week":484,"maker_shows":18,"maker_hidden":513,"reader_version":514,"card":515},"8208595","Duo","a next-generation package manager for the front end","title","Show HN: Duo – a next-generation package manager for the front end","http:\u002F\u002Fduojs.org\u002F","duojs.org","matthewmueller",1408643006,2014,168,100,134,2272,6,"notable","dev_tools","package manager","cli",[24,25,26,27],"front end package manager","javascript modules","browserify alternative","github dependencies","mixed",-0.263,{"positive":31,"neutral":32,"mixed":33,"critical":34},10,28,0,20,58,{"performance":37,"design":40,"docs":43,"idea":44,"execution":46},{"positive":38,"critical":39},2,1,{"positive":41,"critical":42},3,9,{"positive":33,"critical":38},{"positive":38,"critical":45},8,{"positive":38,"critical":33},[39,33,39,41,39,39,33,33,41,38,41,39,39,39,33,33,33,41,48,33,39,33,33,39,48,41,41,39,41,49,39,41,39,39,41,41,41,48,48,39],5,4,null,{"problem":52,"audience":63,"pricing":50,"motivation":50,"time_to_build":50,"stack":74,"openness":84,"stage":84,"team_size":84},{"value":53,"source":54,"evidence":55},"Managing front-end JavaScript dependencies and module bundling","inferred",[56,59],{"id":57,"by":11,"text":58},"8214442","The flow is... 1) Download https:\u002F\u002Fgithub.com\u002Fmatthewmueller\u002Fuid from github 2) Find it's entry using https:\u002F\u002Fgithub.com\u002Fduojs\u002Fmain 3) Parse it's entry, and extract the…",{"id":60,"by":61,"text":62},"8211293","andreaf","I am a little confused about how Duo actually transforms dependencies into JS values. When I write, say, var uid = require('matthewmueller\u002Fuid'); as in the home page example,…",{"value":64,"source":54,"evidence":65},"front-end JavaScript developers",[66,70],{"id":67,"by":68,"text":69},"8208687","compedit","You can require dependencies and assets from the file system or straight from GitHub: Oh my. You've essentially killed Bower and NPM in one swoop then haven't you? An exciting…",{"id":71,"by":72,"text":73},"8208817","colinramsay","This looks superb. Great work.",[75,79],{"value":76,"source":54,"evidence":77},"JavaScript",[78],{"id":57,"by":11,"text":58},{"value":80,"source":81,"evidence":82},"GitHub","maker",[83],{"id":57,"by":11,"text":58},"unknown",{"praise":86,"objections":109,"requests":157,"questions":176,"alternatives":200},[87,96],{"value":88,"source":89,"evidence":90},"Simple and clean approach to dependencies","commenter",[91,92],{"id":71,"by":72,"text":73},{"id":93,"by":94,"text":95},"8208755","neilellis","I love simple things, this gets my +1, look forward to learning more. I can't see why this is browser only, am I missing something?",{"value":97,"source":81,"evidence":98},"Can pin dependency versions inline and allows multiple versions of a library",[99,102,105],{"id":100,"by":11,"text":101},"8210221","Author here. @tomdale We're on the same page. I've worked with many large JS codebases as well and consistency and repeatability are a must. However, as with any tool, it's…",{"id":103,"by":11,"text":104},"8210563","you can require two different versions of the same library and it works just fine. uses a similar process as browserify.",{"id":106,"by":107,"text":108},"8210807","ianstormtaylor","With Duo you can actually have multiple versions of the same Javascript dependency. And then you can use the CLI to figure out what duplicates you have if you want to slim them…",[110,121,128,143],{"value":111,"source":89,"evidence":112},"Inline requires make version upgrades tedious across many files",[113,117],{"id":114,"by":115,"text":116},"8209108","wycats","It sounds like this means that if I wanted to use a specific version of Ember, I would have something like the following line in many files: ```…",{"id":118,"by":119,"text":120},"8208869","zackbloom","I'm not sure this actually improves the flow for me. I (like most sane devs), like to lock my deps to specific versions (or vendor them). Currently, it's just a matter of…",{"value":122,"source":89,"evidence":123},"Lack of a manifest hurts reproducible builds",[124],{"id":125,"by":126,"text":127},"8209146","tomdale","One question I always ask when looking at a package manager is, \"Will this help me have reproducible builds?\" (http:\u002F\u002Fmartinfowler.com\u002Fbliki\u002FReproducibleBuild.html) I've worked…",{"value":129,"source":89,"evidence":130},"Duplicates npm and browserify without clear added value",[131,135,139],{"id":132,"by":133,"text":134},"8219645","andrezsanchez","I have a hard time seeing what exactly the point of having another package manager is. We already have a very established way of managing front-end packages: NPM and Browserify.…",{"id":136,"by":137,"text":138},"8209057","skrebbel","I like the ideas, but it feels like it's just a small incremental step over established solutions like webpack and browserify. Does this have any more to offer other than…",{"id":140,"by":141,"text":142},"8209238","danielnaab","npm supports git repositories as dependencies already (git:\u002F\u002Fgithub.com\u002F...), so that feature doesn't seem like much added value to me. And considering that any real project…",{"value":144,"source":89,"evidence":145},"Multiple versions of a dependency can cause runtime bugs",[146,150,153],{"id":147,"by":148,"text":149},"8210291","munificent","> In Duo you can pin down any dependency right in the file via require('some\u002Frepo@tag'), which is the same as having a manifest with a pinned version. That will do nasty things…",{"id":151,"by":148,"text":152},"8213273","Let's say your app my_app uses foo and bar. They both use baz. You give them each their own version of baz: foo gets baz 1.0 and bar gets baz 2.0. Now, at runtime: ``` my_app…",{"id":154,"by":155,"text":156},"8219433","gary_bernhardt","Mutation isn't necessary to demonstrate the problem. Consider three libraries: first, there's a basic, widely-used datetime library. There's also a timezone library depending on…",[158,165,169],{"value":159,"source":89,"evidence":160},"Support for linking local packages during development",[161],{"id":162,"by":163,"text":164},"8209027","nawitus","Is there support for symlinking for easy development? I mean the equivalent for 'npm link' or 'bower link'. Also, can you host your own \"duo registry\" (if the concept makes sense…",{"value":166,"source":89,"evidence":167},"Private or self-hosted package registry",[168],{"id":162,"by":163,"text":164},{"value":170,"source":89,"evidence":171},"Better error messages and automatic reading of bower and package.json metadata",[172],{"id":173,"by":174,"text":175},"8209009","tjsix","Maybe it's just me but having no manifest makes using this tool quite painful. It has taken me 10 mins just to figure out how to structure the require()'s so that it doesn't…",[177,189,196],{"value":178,"source":89,"evidence":179},"How does it compare with webpack, gulp and browserify",[180,181,185],{"id":136,"by":137,"text":138},{"id":182,"by":183,"text":184},"8208763","vkal","So earlier this summer I learned how to use RequireJS + a smidgen of Grunt, then I felt the need to move towards Gulp and Browserify (which I've just recently started), and now…",{"id":186,"by":187,"text":188},"8211292","progx","Did Duo the same as gulp+browserify ?",{"value":190,"source":89,"evidence":191},"Is it fast in development on large codebases",[192],{"id":193,"by":194,"text":195},"8209128","RoboTeddy","Is it fast during development on large codebases? (e.g. by compiling incrementally)",{"value":197,"source":89,"evidence":198},"How reproducible builds are guaranteed",[199],{"id":125,"by":126,"text":127},[201,206,214,221],{"value":202,"source":89,"evidence":203},"npm and browserify",[204,205],{"id":132,"by":133,"text":134},{"id":140,"by":141,"text":142},{"value":207,"source":89,"evidence":208},"webpack",[209,210],{"id":136,"by":137,"text":138},{"id":211,"by":212,"text":213},"8208956","swah","But, but.. I _just_ decided to use webpack :( More seriously: do you feel like it incorporates all the lessons of its predecessors?",{"value":215,"source":89,"evidence":216},"jspm",[217],{"id":218,"by":219,"text":220},"8213012","theefer","People interested in Duo may also want to have a look at jspm.io. It solves a similar problem, but with a few differences which to me are advantages: - Transparently supports…",{"value":222,"source":89,"evidence":223},"Bower with RequireJS",[224,225],{"id":182,"by":183,"text":184},{"id":226,"by":227,"text":228},"8208761","bpatrianakos","I think I'm missing something. I see how this would be great when it's build time but during development I don't want to have to keep running build commands each time I want to…",{"comments":18,"answered":48,"key":230},[231,232,233],{"id":100,"text":101},{"id":103,"text":104},{"id":234,"text":235},"8209132","The manifest is optional, so for big projects I would probably recommend using a manifest to keep all your versioning in one place. Duo falls back to the manifest if it cannot…",{"commenters":237,"max_depth":238,"maker_replies":18,"first_comment_mins":239,"lifespan_hours":240},55,11,17,227,[242,244,248,252,255,257,259,263,266,269,271,273,276,277,281,283,284,287,290,292,294,297,298,301,302,305,308,309,311,313,315,316,317,320,323,325,328,331,333,336,338,340,343,346,348,350,352,354,355,357,360,363,366,369,372,374,377,380,381,382,384,387,390,393,396,399,401,402,404,405,407,411,413,415,417,419,421,423,425,427,432,436,439,440,443,446,448,450,452,455,458,461,463,465,468,471,473,475,478,481],[125,33,39,243,126,33],"project\u002Fcritical\u002Fperformance",[245,33,41,246,247,33],"8209186","project\u002Fneutral\u002Fnone","TheHydroImpulse",[249,33,33,250,251,33],"8209364","other\u002Fneutral\u002Fnone","agumonkey",[253,33,33,250,254,33],"8210154","CMCDragonkai",[100,33,33,256,11,39],"maker\u002Fneutral\u002Fdesign",[147,33,39,258,148,33],"project\u002Fcritical\u002Fdesign",[260,33,41,261,262,33],"8210351","project\u002Fneutral\u002Fdesign","mattfenwick",[264,33,33,250,265,33],"8210553","steveklabnik",[267,33,39,258,268,33],"8210565","thethimble",[106,33,48,270,107,33],"project\u002Fpositive\u002Fdesign",[272,33,41,261,262,33],"8211853",[274,33,39,258,275,33],"8212163","dsr_",[151,33,39,258,148,33],[278,33,33,279,280,33],"8218931","commenter\u002Fcritical\u002Fdesign","IsaacSchlueter",[282,33,33,279,280,33],"8219343",[154,33,33,279,155,33],[285,33,33,279,286,33],"8219460","joebadmo",[288,33,33,289,155,33],"8219478","commenter\u002Fneutral\u002Fdesign",[291,33,33,289,286,33],"8219694",[293,33,33,289,148,33],"8224550",[295,33,41,261,296,33],"8221761","naholyr",[103,33,33,270,11,39],[299,33,41,261,300,33],"8213482","maherbeg",[114,39,39,258,115,33],[303,39,41,261,304,33],"8209126","anthonyshort",[306,39,41,307,115,33],"8209134","maker\u002Fneutral\u002Fdocs",[234,39,33,261,11,39],[310,39,39,258,115,33],"8209144",[312,39,41,261,247,33],"8209194",[136,38,39,314,137,33],"project\u002Fcritical\u002Fidea",[218,41,33,250,219,33],[118,49,39,258,119,33],[318,48,39,258,319,33],"8208784","michaelmior",[321,48,33,250,322,33],"8208845","tjholowaychuk",[324,48,33,250,247,33],"8208889",[326,48,33,250,327,33],"8208954","chrisrogers",[329,48,33,250,330,33],"8209139","tonyhb",[332,48,33,250,319,33],"8208891",[334,48,33,250,335,33],"8209414","chimeracoder",[337,48,33,250,319,33],"8209434",[339,48,33,250,148,33],"8209811",[341,48,33,250,342,33],"8211220","sagichmal",[344,48,33,345,148,33],"8213281","other\u002Fcritical\u002Fnone",[347,48,33,250,342,33],"8222916",[349,48,41,261,107,33],"8208872",[351,48,48,270,319,33],"8208900",[353,48,41,261,107,33],"8208926",[182,18,33,250,183,33],[356,18,33,250,148,33],"8209821",[358,18,33,250,359,33],"8210393","Gigablah",[361,18,33,250,362,33],"8211618","cel1ne",[173,364,39,365,174,33],7,"project\u002Fcritical\u002Fdocs",[367,364,33,368,304,33],"8209023","commenter\u002Fneutral\u002Fnone",[370,364,33,368,371,33],"8209152","bakareika",[373,364,33,368,247,33],"8209197",[375,364,33,368,376,33],"8210271","skeoh",[378,364,33,250,379,33],"8209218","lobster_johnson",[211,45,33,250,212,33],[226,42,39,258,227,33],[383,42,33,368,319,33],"8208786",[385,42,41,386,247,33],"8208788","project\u002Fneutral\u002Fidea",[388,42,48,389,174,33],"8208806","project\u002Fpositive\u002Fexecution",[391,42,33,368,392,33],"8208818","Kiro",[394,42,33,368,395,33],"8208820","davej",[397,31,41,261,398,33],"8208920","fiatjaf",[400,31,33,256,11,39],"8211266",[60,238,41,261,61,33],[403,238,41,261,61,33],"8211294",[57,238,33,256,11,39],[132,406,39,314,133,33],12,[408,409,41,261,410,33],"8210377",13,"aymericbeaumet",[412,409,41,261,304,33],"8210796",[414,409,41,256,410,33],"8211391",[416,409,48,270,107,33],"8210812",[162,418,41,386,163,33],14,[420,418,41,386,304,33],"8209035",[422,418,39,314,163,33],"8209042",[424,418,41,386,304,33],"8209070",[426,418,39,314,163,33],"8209200",[428,429,48,430,431,33],"8248454",15,"project\u002Fpositive\u002Fnone","stephenway",[433,434,39,314,435,33],"8208794",16,"yid",[437,434,41,386,438,33],"8208974","sehr",[140,239,39,314,141,33],[441,239,33,442,11,39],"8211259","maker\u002Fneutral\u002Fnone",[444,445,33,250,392,33],"8208913",18,[93,447,41,386,94,33],19,[449,447,41,261,319,33],"8208910",[451,447,41,261,163,33],"8209036",[453,447,48,454,94,33],"8209172","project\u002Fpositive\u002Fidea",[456,34,39,365,457,33],"8208894","teabee89",[193,459,41,460,194,33],21,"project\u002Fneutral\u002Fperformance",[462,459,41,460,247,33],"8209348",[464,459,41,460,194,33],"8209415",[466,459,48,467,107,33],"8209479","maker\u002Fpositive\u002Fperformance",[469,459,48,470,194,33],"8209828","project\u002Fpositive\u002Fperformance",[71,472,48,389,72,33],22,[67,474,48,454,68,33],23,[476,474,39,314,477,33],"8208947","bigethan",[479,474,39,314,480,33],"8210195","qwer",[186,482,41,246,187,33],24,[],[485,490,494,499,503,508],{"id":486,"name":487,"points":488,"category":489},"8222652","GlassWire",1013,"security_privacy",{"id":491,"name":492,"points":493,"category":20},"8211575","Stellar",325,{"id":495,"name":496,"points":497,"category":498},"8206855","WhiteboardFox",309,"productivity",{"id":500,"name":501,"points":502,"category":20},"8217895","C\u002FC++ Development Environment for Emacs",146,{"id":504,"name":505,"points":506,"category":507},"8223200","GoReturnMe",145,"consumer_social",{"id":509,"name":510,"points":511,"category":512},"8210972","ZipLocate",140,"data",false,"v2",{"id":516,"name":5,"line":6,"ai":513,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":517,"top":18,"kw":518,"maker":11,"domain":10,"tier":19,"attempts":33,"strip":519,"url":9,"mix":520,"praise":88,"objection":111,"sub":21},8208595,-0.26,[24,25,26,27],"1013110032311100035010015331341311333551",[31,32,33,34],1793990910831]