First, some background: I am a Front End Developer working mostly with Node, with build tools like Gulp/Grunt/Broccoli, and obviously with JS and SASS.
In the last few days I have been evaluating Meteor for a personal project of mine, a simple app featuring HTML5 video games, a blog section and a contact form page. The basic idea would be to update and display a game leaderboard in real time and also save the game state in the mongoDB.
I haven’t actually wrote more than 15 lines of code till now, mostly because I have been investigating if it is worth spending my time learning Meteor. So, I am writing mostly to give the Meteor Community my feedback and also to seek advice.
Things I liked so far
I love the idea of being able to write Isomorphic client/server side code in the language I am most familiar with, and being able to easily exchange data between client and server. AFAIK this is by far the best feature of Meteor, and my main reason to give it a try (otherwise I could use any robust CMS based on Laravel).
I like the Blaze UI library, it is simple and straightforward. I believe that it is more than enough for my needs, React or Angular would probably be way too heavy (I like Riot though).
Meteor community is amazing. I can see that thousands of packages have been already created and the forum is one of the most active and friendly I’ve ever seen. This is a rather important point because I don’t expect Meteor to vanish into thin air anytime soon.
I can not ignore the fact that Meteor is a full-stack framework that combines several open source technologies and works out of the box. I can just type
meteor create <path> and
meteor and I am ready to code. The alternatives don’t look that promising.
Things I didn’t like
Isobuild: I have lot of issues with Isobuild and the package system in general. There is, AFAIK, very little control on what you can output with it. I am used to fine-tune my projects with Gulp and Grunt, but Isobuild seems to work mostly without any configuration file. For example, how do I exclude JS and CSS files (Note: I know I can create a folder with a specific name to exclude them) or compile them in a very specific order, or run them through NPM packages? How do I add a NPM package that isn’t supported by Isobuild? What if the maintainer of a package stop supporting it? Also, why is Isobuild so slow? I can compile large Gulp apps in 5ms compared do 3s or 4s of an empty Meteor project.
Another thing I don’t understand is why popular packages like
yogiben/meteor-admin add all JS, templates and bootstrap CSS in the client? What if I don’t want bootstrap in the client but I still want to use the admin? Isn’t this a big performance issue? Shouldn’t the router take care of downloading all admin assets only when I navigate to myapp.com/admin? I don’t like the idea of having a huge js file with everything inside, it’s not scalable, I guess this could be fixed with something like WaitOnLib, but why not doing it by default though?
The last major issue I have with Meteor is the fact that the MDG is not having a clear roadmap. This is totally confusing for newcomers. What view should I learn? React, Blaze, Riot, EmberJS? I don’t personally care, but a choice must be made, otherwise this will result in a mess in the package system. How’s a package publisher going to support 3 or 4 view libraries? How’s MDG going to maintain the documentation for those libraries?
Because of these issues (expecially the last one), I have decided to temporarily park my Meteor project until there is a clear roadmap available.