[HN Gopher] Why we switched from Webpack to Vite ___________________________________________________________________ Why we switched from Webpack to Vite Author : schestakov Score : 208 points Date : 2021-04-28 18:20 UTC (4 hours ago) (HTM) web link (blog.replit.com) (TXT) w3m dump (blog.replit.com) | keithnz wrote: | I've been using vite for a while now and it has been super | painless. However I use it in a pretty straight forward manner, | about the most "advanced" thing I use is a proxy to redirect web | requests to the backend during development. I haven't played | around with things like SSR yet which is currently marked as | experimental. | jcuenod wrote: | Can anyone comment on Vite vs Snowpack? | holler wrote: | In the Ember.js ecosystem there's a really exciting new build | tool project called "mho", that replaces webpack and uses a novel | strategy running in a service worker to interpret native | javascript modules with minimal overhead & near instant rebuilds | (disclaimer I'm not familiar with how snowpack works under the | hood). | | https://github.com/ef4/mho | | https://www.youtube.com/watch?v=09USvAy7w9g | | https://sqwok.im/p/TleLmpJ9BFp1IQ | yepthatsreality wrote: | > Esbuild is a JS bundler written in Go that bundles dependencies | 10-100x faster than JavaScript based alternatives like Webpack | and Parcel. | | A JS library calling a golang js-build tool to get the job done. | Too funny. | root_axis wrote: | Why is that funny? How is it conceptually different from any of | the variety of scripting languages that call out to C bindings | or binaries? | yepthatsreality wrote: | It's funny because in order to compile/minify JS it passes | said JS to golang which spits out JS to be run under JS. I'm | not allowed to be amused by the circularity? Get a grip. | qbasic_forever wrote: | Python is a C core that takes Python code and spits out | bytecode to interpret and run said Python. What esbuild is | doing is not much different than any other interpreted | language. | | (p.s. JS is not compiled) | yepthatsreality wrote: | It's not much different but yet it needs a solution built | in another language to "build" it. I understand the | process is not much different from other scripted | languages but I find it funny that JS cannot reasonably | do this itself. | | (p.s. I'm aware) | root_axis wrote: | Why so defensive? I didn't say anything about what you're | allowed to do, I simply asked you a question about why you | thought it was funny. | mavelikara wrote: | Many golang webapps use JS as their front-end language. Use the | right tool to get the job done etc. | yepthatsreality wrote: | Being on the web it would be difficult not to no? | ZephyrBlu wrote: | You can server-render pages. | jupp0r wrote: | This might shock you, but webpack runs on node/V8 which is | written in C/C++. | yepthatsreality wrote: | Nope. | kklisura wrote: | How long until "Why we switched from Vite to *"? | trinovantes wrote: | I wonder why all these new bundlers don't provide a webpack- | compatible API to entice new users. I can't take the risk of | investing in a new tool only to find that I can't migrate the | last 20% key features that I need. I also don't have the | bandwidth to constantly switch between vite, webpack, parcel, | etc. every time I switch to a different project. | fastball wrote: | Because my main quibble with webpack is that its API is a mess | and sucks. | qbasic_forever wrote: | Snowpack (which also uses esbuild internally) has a webpack | compatibility extension: | https://www.npmjs.com/package/@snowpack/plugin-webpack - | andrewmcwatters wrote: | I can only imagine it's because the authors don't care, right? | If they cared, they'd build it. But I think most of these | bundlers are out to show you how great they are, and how you | should drop everything to do things their way. | | So, ultimately I think the answer is to say, "No, solve my | problem, not yours." | colordrops wrote: | What about using native es6 imports cached by a service worker? | If you don't have to support old browsers, this is a much better | option than a compile step. Just pull from git and load it in | your browser, no complications eating a weekend reading through | docs and shotgun debugging. | sunflowerdeath wrote: | I have tried to use esbuild, and over the past 3 months I had at | least a dozen times when it has compiled incorrect code that | doesn't work or doesn't do what it's supposed to do. So despite | the performance benefits, I was forced to go back to webpack, | babel, and terser. | ballenf wrote: | Any specific scenarios where it fails? We're using it across a | wide codebase and several teams and I haven't seen or heard | that issue. | donjoe wrote: | Did u try using typescript with esbuild? React + esbuild + | typescript is a perfect combination for me. I had the chance to | kick off a new project a few months ago and started with this | stack. It needed roughly 50 lines of code to get a decent | server side rendering development experience set up. Compile | time is still below 200ms. | | The only issues I had in the beginning was esbuild's | compilation of typescript enums: the import order was off from | time to time. Besides that, no issues. I am also super glad I | do not need to configure webpack any longer. | MintsJohn wrote: | Webdev truly is one of a kind. Not only do you have your source | code, you also have your build code, oddly dictating the | organization of your source code. For extra fun, some libraries | don't build with build system a, others require build system b, | when you're lucky enough to have a working mix, changing build | systems is better to be avoided. Of course periodically the | officially blessed build system for your used libraries changes. | | The webdev ecosystem is so broken, it's no wonder so many | websites deliver assets that are extremely suboptimally | optimised, big unused blobs of assets /scripts slowing page load, | optimising it all is actually made harder than coding it all. | brundolf wrote: | > you also have your build code, oddly dictating the | organization of your source code | | It... really doesn't? You generally have an entry point file - | which can be any file, you just have to specify it to your | build system - and import statements are followed from there | on. If anything you could argue the JS build ecosystem is too | _flexible_ (which is one of the things esbuild is pushing back | against). I 've never heard someone criticize it for being too | _opinionated_. | | > For extra fun, some libraries don't build with build system | a, others require build system b | | I've literally never encountered this problem. Library authors | virtually always ship least-common-denominator JS that will | work without using a build system at all, and then build | systems know how to handle lots of different variations of JS | and converge them into a single representation. Compatibility | is not an issue that exists in my experience. | | > The webdev ecosystem is so broken, it's no wonder so many | websites deliver assets that are extremely suboptimally | optimised, big unused blobs of assets /scripts slowing page | load, optimising it all is actually made harder than coding it | all. | | Now you're just airing your own personal beef which doesn't | actually have anything to do with the original topic. | toddmorey wrote: | I knew someone would bring this comment. | | Webdev can be broken, but doesn't have to be. I am currently | having fun & feeling productive on both a large team project | and some small personal projects. | [deleted] | the_gipsy wrote: | Then also make unit, integration, and e2e work with all the | transpiling. Good luck with sourcemaps! | Kaze404 wrote: | You enable sourcemaps on Webpack with `devtool = "eval- | source-map"` in your config, and I'm not sure how you expect | transpiling to be a problem with testing considering your | tests are also transpiled. | the_gipsy wrote: | Do you compile and run your unit tests with webpack? | kall wrote: | Have you seen the android build system? I mean what the hell is | a gradle wrapper. At least js tools are configured in .json or | .js files not in a special purpose programming language. | | I don't mean to discuss which system is too complicated and | which is not just to point out a lot of real world build | systems are on that level. | napsterbr wrote: | > The webdev ecosystem is so broken | | Allow me to correct this statement: The _Javascript_ ecosystem | is so broken. | | Working with Clojurescript and Elm is an experience that will | make most developers fall in love with web development again. | curun1r wrote: | Also Trunk [0] for Rust-wasm web dev. It's made me not hate | doing the front end for my projects. I look forward to the | Rust web ecosystem evolving to the point where I can | recommend it in a work context. | | [0] https://trunkrs.dev/ | krapp wrote: | Hate to break it to you but Clojurescript, Elm and the whole | paradigm of "compile to JS" languages are part of what is | broken about the javascript ecosystem. So much unnecessary | complexity and energy wasted making javascript pretend to be | something it isn't and to make it do things it was never | meant to do, pressing a small, simple and powerful scripting | language into the service of the profane eldritch abomination | that is Enterprise Development. | deergomoo wrote: | I dunno, I feel that's like saying that Lisp and Haskell | are part of what's broken about the machine code ecosystem. | | ClojureScript and Elm aren't compile-to-JS languages for | the sake of doing something weird, there's just literally | nothing else that will run in a browser (except wasm but | probably best not to get into that). | | Different programming languages exist for a multitude of | valid reasons, the compiled output isn't particularly | important as long as it can express everything you need it | to. | krapp wrote: | > I dunno, I feel that's like saying that Lisp and | Haskell are part of what's broken about the machine code | ecosystem. | | It would be if machine code were another high-level text- | based language completely unrelated to either Lisp or | Haskell with its own semantics, execution model and type | system rather than a more directly machine-readable | format of those languages themselves. | | Javascript is fundamentally different enough from a | bytecode for any arbitrary language that, at least to me | the distinction matters. I can accept that it works well | enough that most people don't care, even though I suspect | most of the use cases for doing so (error checking, type | checking) could be better served with linters or editor | tools for JS itself. | | But the decision to avoid actually writing javascript at | all costs has contributed a great deal of complexity in | the JS ecosystem, which translates into the bloat in the | web that everyone complains about, because all of that | javascript is wasting time and cycles simulating other | languages. | jupp0r wrote: | I see you have never worked on a C/C++ project. | uhhhhhhhhhhhhhh wrote: | Yeah this appears to be more or less the essential complexity | of build+link | Shorel wrote: | I have done both. C++ is miles better in comparison. | z3t4 wrote: | For personal projects I just use plain javaScript, ES5 even, | without any compile steps, everything loads instantly and runs | on every browser that supports JavaScript, and the development | can be set up in any environment/OS without headaches. I do use | minification for production but that is not really necessary if | the browser supports loading JS-script tags async (all major | browsers). The bundle gets very small without any frameworks | attached. Debugging is easy with the browser built in dev-tools | - with small error messages that always have the correct line | (eg. no source maps). I'm currently working on a 100,000+ line | JS project that uses the plugin pattern with script tags and | it's very manageable, adding new features is fast and fun. | There are of course trade-offs, I can't just "npm install | react-x-y-z", but the browser API's are extensive, you can do | just about anything on the front-end with just the native | browser components and API's. | andrewmcwatters wrote: | My position on web development for even consulting projects is | just to not use build processes as much as possible. I still end | up using them for things like JSX, but I don't bundle anymore, | nor do any web projects I build require installation out of the | box. | | I've found that by doing so, I can just basically ignore, for | years on end, all of the peddlers pushing how their projects make | development easier or faster or some nonsense. | | You know what's easiest and fastest? Flat files in a good | directory structure with some getting started template. | | That's it. The fastest build times are the ones that don't exist. | Period. | | Web development is as complicated as you choose to make it. Very | few fields work like this. | shakow wrote: | > Very few fields work like this. | | Quite the opposite; I would argue that webdev is basically | rediscovering the whole shebang, but decades later. | | Modern webdev with transpilation, linking, pruning, compilation | to WASM etc. starts to dreadfully look like the classical | native development paradigm. | andrewmcwatters wrote: | Yeah, and basically none of that is necessary. Which is my | point exactly. | WORMS_EAT_WORMS wrote: | From the article, a good explainer: | | > Vite works by treating your source code and your dependencies | differently. Unlike your source code, dependencies don't change | nearly as often during development. Vite takes advantage of this | fact by pre-bundling your dependencies using esbuild. Esbuild is | a JS bundler written in Go that bundles dependencies 10-100x | faster than JavaScript based alternatives like Webpack and | Parcel. | vaughan wrote: | I find it useful to have my vendor dependencies compiled and | watched for debugging. There are always bugs in deps or poor | error messages, and sometimes the dev tools debugger doesn't | work properly, so being able to modify a dev is nice. | | Of course it would prob be better if this was a toggle. | | I think webpack module federation may improve this situation | too. I used webpack all plugin previously to speed up vendor | dep compilation. | | Thing about webpack though is it's so complex how all this | works that I always have to revisit it every few months to jog | my memory. | | We need simpler abstractions on top. Next is nice but still, if | you need to dive deeper it's painful. | | I think in like 20 years time we will probably be able to get | rid of all of this tool chain and the new kids will never know | the pains we went through. | brundolf wrote: | I haven't tried Vite, but I tried ESBuild last weekend on a | personal project and was absolutely blown away. Even as someone | who's become pretty comfortable working in the Webpack trenches, | I don't see myself starting a new project with Webpack ever | again. There's just no reason to when you can get the exact same | output, much faster, without any of the headaches. | | Honestly it's so good I wonder if it will undercut Deno a little | bit by lowering the barrier for bootstrapping a TypeScript | project | marclave wrote: | It's always impressive to me that, the co-founder of Figma | (https://twitter.com/evanwallace) who essentially built a browser | in a browser (figma.com) built esbuild. Could honestly be the Woz | of our generation. | Vekz wrote: | He has some insanely high quality projects. shout out to his | His Kiwi Schema https://github.com/evanw/kiwi project that | saved me from protobuff swamp monster hell | nailer wrote: | How is Figma considered a browser in a browser? It's a great | design tool, I just haven't heard it described this way before. | Palmik wrote: | How do people using Vite deal with Common JS dependencies? As far | as I tried, there were issues with those when using "vite dev". | Sadly, at this point, I can't get rid of those (e.g. | protobufs+grpc-web generated code). | vijaybritto wrote: | I recently ported a microfrontend based frontend to webpack 5 and | replaced babel/terser with esbuild and the builds are 50%-60% | faster now. I couldnt replace webpack because I am using Module | Federation which is not available in other bundlers. Would | recommend this approach if not possible to fully replace webpack. | eliseumds wrote: | I literally just spent days trying out Vite and comparing it to | Webpack 5, and I can comfortably say that they are in two very | distinct leagues. It isn't fair to compare Vite to a CRA build | with Webpack. You can greatly improve Webpack's performance by: | | * Making sure `mode` is set to "development" (don't specify it | all if in doubt) | | * Ditching babel-loader and using esbuild-loader instead | | * Adjusting build targets and making sure polyfills are not added | in development | | * Making sure you don't import the entirety of libraries like | Lodash and MomentJS (prefer date-fns) | | * [FUTURE] We'll soon be able to tell Webpack to output ES | modules just like Vite [1] | | Vite still has many problems: | | * It just isn't suitable for proper server-side rendering, we'd | need access to chunk names at build time | | * It has a weird mix of own and Rollup config settings that seems | somewhat unpredictable | | * Many open issues regarding module imports, for ex, when a CJS | module imports an ES one [2] | | Our current bottleneck with Webpack is actually sass-loader, | taking at least 70% of the time during a fresh build, and we'd | have the same problem with Vite. | | Something else that is worth pointing out is the ecosystem: | Webpack's community has built tons of plugins for basically any | use case you can imagine, and version 5 supports module | federation, persistent caching, externals (very handy when doing | SSR), customizable filename generators, performance hints, etc | etc. Totally different game. | | Try to keep your build config simple, avoid too many loaders, | plugins, and you should be fine 99% of the time. If you hit a | wall, install _speed-measure-webpack-plugin_ to get some help. | | [1] https://github.com/webpack/webpack/issues/2933 | | [2] | https://github.com/vitejs/vite/issues?q=is%3Aissue+is%3Aopen... | theon144 wrote: | >* It has a weird mix of own and Rollup config settings that | seems somewhat unpredictable | | Oh god, this is a giant red flag. This is precisely one of my | biggest gripes with Quasar (a Vue framework), which, on top of | webpack/vue adds its own config that are intermingled with | vue's and webpack's, and its honestly a mess, and oftentimes | just straight up makes problems harder to solve. | | I am obviously not railing against config dedicated to a single | tool in a toolchain, but the way you described it rings a bell, | especially the "unpredictability". | | >* Many open issues regarding module imports, for ex, when a | CJS module imports an ES one | | This also seems to confirm my and other's suspicion, that the | tool isn't really "deliver-grade". | | >If you hit a wall, install speed-measure-webpack-plugin to get | some help. | | But on the other hand, this is at least the fifth plugin I have | heard someone recommend, dedicated just to profiling Webpack. | | What do you think about the time difference shown in the | article? I sort of feel it's a bit disingenuous since the test | included a lot of other variables, but it seems hard to argue | against it if it's this plain. Is this a config issue, or a | "most commonly used loader" issue...? | eliseumds wrote: | I'd be dishonest if I told you I was able to compare them | 1-to-1. I couldn't finish my Vite setup because of bugs and | lack of proper SSR support. | | I believe that, at this point, people are just nitpicking. | When working on a client-side-only app, Vite is faster, but | not by that much. In one of our apps, I saw it starting up in | 1s compared to 2s with Webpack, and reloads in 100ms compared | to 250ms. This is a Preact/TS/Emotion app that outputs almost | 7MB of assets, 61 files to be precise, and works on IE11. And | I hadn't even tried persistent caching with it yet. Webpack 5 | with esbuild is a fast-enough solution. | | NextJS is a well-established tool now and version 10.2 uses | Webpack 5 under the hood. V11 is looking insanely fast (I | suspect they replaced Babel with esbuild): | https://twitter.com/shuding_/status/1378086219708473344. | | So yeah, slow performance with Webpack is definitely caused | by a bad set of loaders/plugins. Eject a CRA app and you'll | see a monster coming out. | earthboundkid wrote: | If you figure out how to get Webpack to solve all these issues, | that makes one working Webpack installation. When Vite solves | their issues, all Vite installations will have the issues | solved. | eliseumds wrote: | Vite is not a completely opinionated tool. You can still | customise its behaviour and use plugins, so both | installations would have very similar vulnerabilities at the | end. For SSR, you need a self-written server entry point. | | Webpack 5 has introduced asset modules, so now you can safely | ditch raw-loader, url-loader and file-loader. [1] | | You might have NextJS or CRA in mind. | | [1] https://webpack.js.org/guides/asset-modules/ | jitl wrote: | We just switched from TypeScript/ts-node to esbuild for server- | side code at Notion; it's been great. Would love to see the same | kind of speed wins for our clients :') | patak_js wrote: | If you want to learn more about Vite, I recommend that you join | Vite Land (https://chat.vitejs.dev). There is a very active and | helpful community, and there are tons of opportunities to | collaborate in the creation of plugins, integrations, and to | improve Vite itself. | rgovostes wrote: | When I learned about Prolog in university I had a "eureka" moment | where I wondered why I was spending all this time learning to | implement algorithms in imperative code, when I could just | express the output I want and then let some uber constraint | solver figure out how to produce it. How liberating declarative | programming would be if only we started coding with it more. | | When I try to use Webpack, as I click through obsolete | StackOverflow posts, trying to figure out the right key-value | pairs to get the output I want, I realize how mistaken I was. I | hope build tools for the web become less "magical" and more | predictable and debuggable, even if it means discarding their | declarative form. | zackkrida wrote: | A similar tool in this space is Jason Miller's (@developit) WMR: | | https://github.com/preactjs/wmr | TurningCanadian wrote: | For people already on webpack, there's esbuild-loader | (https://github.com/privatenumber/esbuild-loader) | temuze wrote: | We recently switched from ts-loader to esbuild-loader. It was | super easy and it halved our build time with zero | complications. Highly recommend. | nailer wrote: | Ooh next uses webpack right? Might be some free speed. Thanks. | wetmore wrote: | Yes but there are some difficulties you may run into when | replacing the default loader nextjs uses, because it includes | some custom babel plugins that get blown away when you | replace the loader with esbuild-loader. | nailer wrote: | Thanks for the heads up. | gwn7 wrote: | I wonder how this compares to a proper manual Webpack | configuration. Comparing it to CRA isn't really helpful to me, as | CRA is already known to be very slow. | | I would consider trying it if it has significant performance | benefits over a manual Webpack config, especially one making use | of esbuild-loader (https://github.com/privatenumber/esbuild- | loader) | dmitriid wrote: | > compares to a proper manual Webpack configuration | | What is a "proper webpack config". | | It's such a complex and arcane beast, that I doubt anyone could | really figure out a "proper" way to do anything with it. | zellyn wrote: | I was a little surprised that Vite, which depends on esbuild and | thus should know better, is written in Javascript. | | I presume this is a considered choice, and that what Vite does is | unlikely to be on the critical path for edit/build/view cycle | time... | afavour wrote: | > thus should know better | | I would posit that perhaps they know better than you. | | When pure performance is the concern it makes sense to go to a | more performant language, like Go. But every time your | JavaScript build tool moves away from JavaScript you close | yourself off to a huge pool of potential code contributors and | make it a lot more difficult to customise. So I think Vite has | it just right: optimise the really intensive stuff, leave the | rest more available and more editable. | zellyn wrote: | Hmmm. I knew I was being a bit of a smartass with, "and thus | should know better", but I figured I mediated that in the | second sentence, where I presumed they know what they're doing. | -\\_(tsu)_/- | wonnage wrote: | The speedup from tools like esbuild, swc, etc. are not because | of the language they were written in but because they're | competing against Babel. Babel is this single-threaded highly- | extensible behemoth. On top of this, you're encouraged to | install dozens of plugins, and each plugin has access to global | state. | | The new transpilers have worked around this problem by | introducing various limitations. esbuild plugins literally | can't modify the AST. It's basically a way for you to run a | command on a string/file. So sure, if you redefine the problem | as string transforms rather than AST transforms, you can get an | O(N) speedup... | eliseumds wrote: | Precisely. I'd advise having esbuild behind Babel if you | really need an specific Babel plugin, for ex: | | * Transform the file using esbuild first | | * Then use Babel with that one specific plugin (Loadable | Components, Styled Components, Apollo, React Refresh...) | | This is much faster than letting Babel do all the work. | andrew_ wrote: | > thus should know better | | This reads as a very acrimonious, biased take. Authors choose | the tools they use based on a number of criteria and personal | preferences. It's one thing to disagree with them, it's another | to project judgement without knowing the why. | Daishiman wrote: | Frankly, I would pass. | | The switchover of build tools in JS land is insane. I get that | this has concrete performance improvements over alternatives, but | I wonder if the same effort put towards improving an existing | toolchain wouldn't get you a lot of similar efforts without | breaking everything yet again. | dlrush wrote: | You can switch to esbuild now or you can switch later, but you | will switch. It is superior in design, configuration and | performance by orders of magnitude. | root_axis wrote: | That's the beauty of it, if the concrete performance | improvements don't seem like a worthwhile tradeoff you don't | have to use it. The idea that everyone should just contribute | to one package instead of creating their own solutions is just | silly, we are not able to dictate what people code up in their | own time. Besides, there are dozens and sometimes hundreds of | active contributors to every popular open source package, just | adding more developers doesn't necessarily make things better, | not to mention that the necessary quality control and code | review demands for mature projects means many contributions are | often misguided or not useful. | vaughan wrote: | A counter point would be to look at the Python ecosystem. | They have many fewer libraries but the ones they have are | very well maintained and widely adopted. | | JS/Node is full of unmaintained projects that people | inevitably need to migrate away from. | | Of all the new choices in bundlers today, it's also | inevitable that some won't work out, yet they will drive hype | and adoption, which could have been spent on already | established tools such as webpack. | | Yes, innovation is good and no one should tell someone what | to do in their free time. | | But it's always going to be harder to build on top of old | rather than to write something new, but what is new | eventually becomes old...and the cycle repeats. | root_axis wrote: | > _A counter point would be to look at the Python | ecosystem. They have many fewer libraries but the ones they | have are very well maintained and widely adopted._ | | So what? It is what it is - the python ecosystem faces | completely different challenges than the JS ecosystem, if | the browsers exclusively ran Python instead of JS it would | be the exact same situation for Python. | | > _JS /Node is full of unmaintained projects that people | inevitably need to migrate away from_ | | This isn't true. jQuery, Angular.js, Angular, React, Vue | etc are all still maintained (check their githubs if you | are in doubt) and all still work just fine, so if you want | to use the same tooling you did a decade ago that's totally | possible. | | > _it's always going to be harder to build on top of old | rather than to write something new_ | | So what? If you want to contribute to old projects instead | of writing something new you're free to do that, and if you | don't like new stuff you don't have to use it, complaining | about this stuff is just pointless contrarianism, but of | course, you're free to do that too. | bastijn wrote: | Thanks for reminding me I'm getting old and corporate. | | My first two thoughts were: | | * Imagine all the smart people in webdev world would improve the | existing tool rather than create a new one. [0] | | * "if you do less, it will go faster". I.e. Vite is young and | new, supports a subset of Webpack and of course boasts how fast | it is. Yet my repos can't use it because it doesn't has the | support it needs for my repo sizes with legacy stuff. Of course | it is "on the roadmap" and by the time it will be supported Vite | is as slow (if lucky) as Webpack. Doesn't matter though as a new | tool will be there long before Vite reaches Webpack.. | | Yup. Getting old and also cynical in the evenings. Dammit! | | [0] https://xkcd.com/927/ | amasad wrote: | Some stats not mentioned in the post. Create React App (webpack) | vs Vite (esbuild) on Replit containers: | | - 1 second start up time on Vite vs 15 seconds for CRA | | - React.js hello world project is 234mb on CRA and only 34mb on | Vite | | - 1GB RAM for Vite dev server vs 3GB+ for CRA | | This is a perfect example of how fast and efficient tools can be, | and I think we can do even better! Super excited about the future | of JavaScript tooling ecosystem with more focus on efficiency and | speed. | | In addition to the UX win, and I wish we measured this, but I bet | this saved us thousands of dollars in monthly cloud spend. | [deleted] | sjaak wrote: | "Only" 34mb for a hello world project? I can't tell if you're | being ironic but I hope so! | amasad wrote: | Nearly an order of magnitude reduction. What do you think of | that? | lhorie wrote: | They probably mean that "hello world".length == 11 // bytes | nine_k wrote: | Most of the _build tooling_ gets installed along the way. | | The compiled JS is hundreds of bytes at most, usually | because React creates a bunch of boilerplate for you (a | basic CSS file, an application, a web worker, etc) which | you may remove. | JMTQp8lwXL wrote: | As the "webpack" guy on my team, these numbers look extremely | compelling, but I also know Webpack does a lot for us (e.g., | through Webpack v4, it includes browserfied node libs as | needed). Beyond node libs, there's a long tail of niche things | that need to be taken of... am I trading coverage of that long | tail for speed? | jakelazaroff wrote: | In my experience, the vast majority of use cases are covered | by these "no config" tools. If your app isn't a typical CRUD | app you might fall into that long tail, but FWIW almost every | app I've built has not :) | desireco42 wrote: | You still need webpack for production build :). So all is | good. | darekkay wrote: | Vite uses Rollup for production builds, which is still much | faster than webpack. | simlevesque wrote: | Why can't you use esbuild for production builds ? | vijaybritto wrote: | You still can do polyfills manually via browserify packages | judofyr wrote: | Previously I've been a heavy user of Webpack + plugins, but | I've now moved over to ESBuild for all new projects. This | means letting go of many fancy features, but the overall | complexity is so much reduced and I'm a lot happier. | | Before: Chain together style-loader, css-loader, postcss- | loader and the MiniCssExtractPlugin in some weird way. So | complicated to understand which PostCSS plugins interacts | with resolving imports. I often need to look into the | webpack.config.js to understand how everything work. After: | Use PostCSS and its tooling for CSS. Yes, there's now a | separate process I also need to run in order to watch and | build CSS. Yes, I can no longer `import "./style.css"` from | the JavaScript files. But it's so much easier to reason | about! The CSS tooling creates a CSS file; the JavaScript | tooling creates a JavaScript file. Do I want to build SVG | sprites? Well, that can very easily be a separate script | which I can debug independently and _not_ couple into my | builder's plugin system. | | In addition, now my JavaScript files are _actually_ just | JavaScript and I can be pretty sure that it will work with | _any_ new tooling without any problems. Once the successor to | ESBuild comes out I will most likely be able to point it at | index.js and everything will work. | acdha wrote: | > In addition, now my JavaScript files are actually just | JavaScript and I can be pretty sure that it will work with | any new tooling without any problems. | | That's been my feeling for years, too: if your team is less | than, say, several dozen people there's a significant | amount of merit to having something which doesn't require | continous care and feeding for anyone to work, especially | when it's combining a number of complex libraries with | independent development teams. | fiddlerwoaroof wrote: | I'd like to see non-CRA numbers: I've found that a simple React | + Webpack 5 project is not as bad to get off the ground as it | used to be. | amasad wrote: | I'm sure it's less disk space because it has less deps but | the most of the RAM and CPU usage in CRA is Webpack so I'd be | surprised if that changed much. | fiddlerwoaroof wrote: | I'd like to see the numbers: the webpack config CRA eject | gives you is a monster. | mumphster wrote: | webpack AND all the extra plugins and preprocessing and | postprocessing CRA adds -- its not a small webpack setup by | any means and you can get 1s build times with webpack | pretty easily without CRA | bavell wrote: | Agreed, I use webpack for small and medium projects and | it's basically instant. I use TS but not the compiler - I | tell babel to strip types and use just a few plugins, | transforms and loaders. | | I'm not in love but it's a core tool in almost all of my | projects, personal and professional. | wildpeaks wrote: | Exactly: 99% of the time, "webpack is slow" is just code for | "I have Babel in my toolchain" and forgetting to set ts- | loader as "transpile only". | | Personally I removed it years ago, and Webpack 5 even allowed | me to get rid of more loaders now that there are Assets | Modules that automatically detect assets and webworkers using | the "new URL()" syntax, and Typescript does everything else I | need. | joshxyz wrote: | I can remove babel in my code? | fiddlerwoaroof wrote: | It depends on your target platform: ES6 modules are | basically supported in every browser I care about, so the | major reason for Babel is JSX | fiddlerwoaroof wrote: | The new URL() thing is amazing | netghost wrote: | Can someone clarify what the new URL() thing is? | __s wrote: | https://webpack.js.org/guides/asset-modules | fiddlerwoaroof wrote: | this is the release notes for it: | | https://webpack.js.org/blog/2020-10-10-webpack-5-release/ | #as... | protonimitate wrote: | This is informative. | | How is the configuration overhead? Is it relatively easy to get | Vite + a custom react app template + tsx + testing up and | running? | | CRA is bloated, but still one of the fastest ways to get a | "full app" up and running with React. | amasad wrote: | I don't think Vite has a testing story yet. As for the rest, | yes, it totally is straightforward. We only had to change one | line of configuration in the base template for it to work on | Replit. See https://replit.com/@templates/Reactjs | mariusmg wrote: | >Super excited about the future of JavaScript tooling ecosystem | with more focus on efficiency and speed. | | Well they can't get worse than now... 234mb for a friggin hello | world app | koolba wrote: | It's more of a hello import the world. | spoiler wrote: | It's worth noting that the tooling and build systems are that | big. They include type definitions, binaries, scss | preprocessors, typescript compiler, linter, and a lot of | other tools to enhance DX. Some of them might include other | non-code resources. | | The hello world app is _not_ going to be this big. | ng12 wrote: | Would you count the size of the JVM when you do Hello World | in Java? | [deleted] | hombre_fatal wrote: | You could, since it's a runtime dep. But a better | comparison would be to the client dev tool chains in other | ecosystems, like Xcode (11GB), though still not very | interesting. Turns out client dev is hard and it doesn't | make much sense hand wringing over dev tool size metrics. | | Better to look at how well they solve their problem space. | Scarbutt wrote: | No because they are not counting the size of the browser or | nodejs | larrymyers wrote: | I tried out both snowpack and esbuild recently, and while the | approach of using es modules was neat, these tools are still | wildly immature compared to webpack. | | Need to handle non-js assets in your bundle? Need to integrate | into both node and browser environments? | | You should stick with webpack. Any time you lose waiting for | webpack to run you will get back 10x over by not fighting with | your tooling because it doesn't handle a set of use cases you | have. | | I'm sure the next generation of build tools and bundlers will | mature over time and we'll all get to enjoy the benefits of es | modules, but right now webpack's mature plugin ecosystem, | documentation, and stability makes it my default choice. | throwaway894345 wrote: | > Any time you lose waiting for webpack to run you will get | back 10x over by not fighting with your tooling because it | doesn't handle a set of use cases you have. | | Generally I think this is good advice for tools--stick with the | mature thing. But my former company's webpack builds were 30+ | minutes for a relatively simple site. No doubt something was | misconfigured, but you really have to be a webpack expert to | get any sort of insight into where the time is going, and even | then it may not be especially actionable (or at least not | obviously so). In our case, we were using a monorepo and we | didn't have something like Bazel, so this was painful for | backend engineers, data scientists, etc--not just frontend | engineers. | | Maybe our case was pathological, but we would have saved a ton | of time moving to esbuild and building whatever additional | features we needed from scratch. | theon144 wrote: | Your experience mirrors mine to a letter - I appreciate the | wide variety of use cases that are covered by Webpack (a | number of which are crucial to our build process), but its | performance is abysmal (20m+ on CI) and totally inscrutable; | making the potential switch from it rather enticing. | | Especially as seeing that there is no good solution (but a | lot of attempts at them), I feel it somewhat points to this | overcomplexity being a problem central to Webpack. | willhoyle wrote: | > my former company's webpack builds were 30+ minutes for a | relatively simple site | | I'm genuinely curious what simple site would cause a 30+ | minute build? Is it just one of those things that grow over | time? | throwaway894345 wrote: | I wasn't a frontend developer, so I'm not familiar with the | details, but it seemed to be pretty slow from the start, | but compounded as our app grew in size. I.e., there was | some large coefficient associated with our web pack | configuration. | vaughan wrote: | I feel like there just needs to be a good plugin that gives | you proper stats as to how long things are taking and tips to | improve things. | | It's usually slow css loaders, or too-inclusive patterns for | loaders ending up processing node_modules, and not good | enough disk caching. | | There is a plugin called smc to monitor loader execution | time. | | Dll plugin was the best speed up to avoid recompiling things | that don't change, but now module federation is suppose to be | a better solution. Disk caching in v5 will also do great | things. | | Thing is, it's so complicated to setup, and debugging it | involves so much config tweaking ans waiting. | | I think we are a few years out from when we have nice speedy | builds in webpack with good abstractions. | | But then it's a question of whether people move away from | webpack because we don't need all the plugins and | transpiration and want native compile speeds. | | One thing for certain though is the hype cycle will continue | on... ___________________________________________________________________ (page generated 2021-04-28 23:00 UTC)