First off. Meteor is excellent, and yes - all the way up to 1.6 our upgrade path was quite easy. However, upgrading past 1.6 (even to 1.6.x) has caused us several problems.
The biggest single problem is that we still can’t build our projects with 1.6.x/1.7 - this issue might be the same as ours (it reads a little differently). What we found was the compiler was a little aggressive at fixing code like this:
if (whatever) {
const something = aFunction(() => {
use(something);
});
}
It replaces it with
if (whatever)
const something = ...
which is invalid.
The ostrio:files package was another problem. The coffeescript upgrade stopped this package from working in a number of places. I know almost nothing about coffeescript, and didn’t have the capacity to figure out exactly what the problems here were. We’d also forked the package to deal with some problems (related to security and reliability) we were experiencing. Unfortunately I can’t share what these are until we complete our upgrade to remove the dependency. We weren’t willing to risk upgrading to the latest version and possibly losing our changes, or having something else break here. Unfortunately, the coffeescript upgrade caused things to break in unexpected places. e.g., most of the code would run fine, but specific things would break. It’s likely that these areas would be obvious to a coffeescript expert.
Regarding Kadira, collection-hooks and simple schema. Yes, they play nice with each other in the sense that they can all be installed. But if you dont have the load order correct (something we’re still working out) you’ll find that either your hooks dont fire, your schema doesnt get validated (sometimes different results on client and server) or kadira doesnt track the DB calls. I’m not entirely sure that these problems were related to the upgrade (i.e., they may have existed before but been excaserbated by the upgrade), but what WAS related to the upgrade was the practicalmeteor package, and specifically interactions between it, the hwillson:stub-collections package and other packages that hook into a collection (e.g., those above). For example, our test suite contains around 2000 tests, all of which were running prior to the switch. Upon switching, almost all of these tests didn’t run (not failed, simply didnt run). We’re still looking into why this was the case.
So to summarize, the babel compiler was a core issue, the remainder were all package issues, caused by a core upgrade of coffeescript. However, my understanding of the question wasn’t that it asks how difficult is upgrading meteor in a project containing no packages, but rather how much time should be budgetted for upgrading an existing project. While the packages aren’t part of meteor core, if a meteor upgrade breaks a package, thats something that will need to be either reported to the package maintainer (blocking your upgrade until a fix is issued) or will require you to fork and maintain the package yourself, or requires you to replace the package. All of these take time which should be counted towards how long the meteor upgrade took.
I expect everyones update experiences differ, depending on the style and complexity of the project and whether the project is currently under development (i.e., new features being added). I suspect that our upgrade path is more complex than it needs to be due to:
- Our rapid development of new features
- The structure of our project (cordova + offline + 4 public facing systems + common package + several custom NPM packages)
- Our over reliance on third-party packages
- Poor test coverage in some of the more complex areas
- Our reliance on upgrades for new features under development.
My purpose here was really only to present a counter-point to your “4 hours in 6 months” comment about upgrades. I wish ours were so easy!