5 ms·
Not sure if this is a dumb question but I haven't been able to find an answer anywhere. I currently use underscore 1.8.3. Can I just swap lodash in, or is refa
by HNcow 11y ago
Not sure if this is a dumb question but I haven't been able to find an answer anywhere.
I currently use underscore 1.8.3. Can I just swap lodash in, or is refactoring involved? I know it's a fork, and I want to move over, but was curious if anyone know off the top of their heads if a lot of work as involved.
- kevindeasis 11y agoI'll put this here just in case no one comments. https://lodash.com/docs#forEach https://lodash.com/docs#forEach http://underscorejs.org/#each http://underscorejs.org/#each
- johnhenry 11y agoIf I'm correct, you're showing this as a counter example to prove that the two have incompatible APIs and are thus LoDash can't be used ad a drop in replacement. However, Lodash does alias it's 'forEach' function with 'each', so this wouldn't be an issue?
- tdumitrescu 11y agoYeah, each and forEach are aliases in both lodash and underscore.
- ksherlock 11y agounderscore.each has an optional 3rd parameter (context). lodash.each does not. If you depend on that 3rd parameter, you will be in a world of pain if you drop-in lodash. In fact you'd be better off if there was no alias because you would catch the problem sooner and have to think about the API differences when fixing it.
- 9point6 11y agoTo be fair, that context parameter has only just been removed as part of 4.0.0. Instead they recommend you change your code to be of the form: _.each(collection, _.bind(function, context)) Which actually seems a lot more correct than some arbitrary context parameter
- vkjv 11y agoHow is it arbitrary? It's part of the ES spec. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe... I'm honestly curious why this is being removed?
- 9point6 11y agoAh, I actually didn't realise this was the case, I've always used `.bind(this)` for this kind of thing.
- ne8il 11y agoI haven't looked over the changelog/breaking changes for 4.0.0, so this may not encompass everything there, but there are a few changes you need to be aware of. How hard it is depends on which functions you use currently, but I doubt it would take more than an hour of find-replace work. They are listed here : https://github.com/lodash/lodash/wiki/Migrating https://github.com/lodash/lodash/wiki/Migrating The ones that affected me the most were the changes to the overloaded _.first, _.last, etc, but YMMV.
- krat0sprakhar 11y agoI've done similar refactorings in the past (somehow my fingers only remember `npm install underscore`) and for me it has always been a drop-in replacement. However, as others have pointed out, it does depend on how much functions you are using and from my experience the whole thing should not take long.
- patates 11y agoWell, do you have tests? It would take 10 minutes if you are well-covered. Otherwise, I'd go through each usage.
- jdd 11y agoLodash v1 was a drop-in Underscore replacement. Lodash v2 was not but offered an lodash.underscore.js build. Lodash v3 dropped the compat build in favor of using individual lodash modules until you're able to transition Lodash v4 continues the view of v3