farmOS / field-kit

A modular, offline-first companion app to farmOS.
https://farmOS.org
GNU General Public License v3.0
59 stars 38 forks source link

Upgrade tooling and dependencies #481

Closed jgaehring closed 2 years ago

jgaehring commented 2 years ago

As I mentioned in https://github.com/farmOS/farmOS-client/issues/420#issuecomment-942933621:

I spent a good chunk of time fixing things with our devServer proxy settings tonight (0c2d824), and realized how old and crusty our toolchain has become. It's still got some bits of config that I think predate Vue CLI and other niceties that have been around a long time now. Plus I'm worried our days are limited before we'll be forced to update to Webpack 5, and I'd just as well avoid that entirely in favor of adopting Vite. It's still scary to have to change things, and I think so much of that could be avoided if we re-scaffold the project with Vue 3 and Vite. It should pave the way for better tooling for Field Modules (#422) and might knock out smaller issues like #470 in the same stroke.

I also need to upgrade Storybook, to resolve storybookjs/storybook#12634, among other things.

In preparation for that, and because with the resolution of #471 I've closed all the "low hanging fruit" issues for the beta milestone, I've tagged 2.0.0-alpha.3, so we have a clear starting point for these changes. These changes shouldn't effect anything outside the dev environment and build process, but I don't know what impact it might have on, say, how our bundles are content-hashed, and whether that might have knock-on effects with how the service worker is caching assets. So all in all, it seems like a good idea to have some clear demarcation for these changes in the version history.

jgaehring commented 2 years ago

BIG step forward last night:

https://github.com/jgaehring/farmOS-client/commit/c1d34c226d9e496f0fbcb5505e2b0ff94f8b386b

No more Webpack! HUZZAH!!!

And Vite is soooo much faster, with soooo fewer dependencies. I think this tees things up nicely for migrating to Vue 3, though we don't need to do that right away. Most of all it gives me piece of mind moving forward, especially as I get into more nitty-gritty parts of this milestone where I don't want to get bogged down with tooling issues.

There are still some things to fix, namely:

I definitely want to get eslint working again, to make development tolerable going forward. Tests are certainly important, but honestly I only have a couple unit tests anyways, and it's been broken for a little while now, so I don't think it's the highest priority. As for Storybook, this is something I definitely want to get up and running again before beta release, b/c I think it's a key part of documenting the Field Module API, but also not the highest priority.

jgaehring commented 2 years ago

For future reference, the tool I used to initially convert us from Webpack to Vite in 65fa8a0 was webpack-to-vite.

Great little script! There was still plenty more to do manually, but it got the ball rolling.

jgaehring commented 2 years ago

Ok, I have resolved most of the issues with eslint, at least for now, and I've opened separate issues regarding tests and Storybook, so I am closing this one.

A few last things to note, I added back the .vue extension to all import statements (49e3db9). This seems to be the recommended approach, per https://github.com/vitejs/vite/issues/178#issuecomment-630138450. Also, the linter is now picking up this vue/multi-word-component-names rule, which I would like to fix, but I want to hold off for now. Finally, there are still some TODO comments causing warnings that still need to be fixed. These are pegged to outstanding issues in the beta milestone, like #456, so I'm confident they'll be caught before beta.

In general I would like to make sure we are getting no linting errors or warnings by the time we release beta. It would be nice to build this into possible a CI workflow, once #482 and #483 are resolved, but it's certainly not the most pressing concern.