4 ms·
On the other hand, as someone who knows a little js from the bad old days but has been doing python for over a decade, trying to get up and running with a moder
by tekromancr 8y ago
On the other hand, as someone who knows a little js from the bad old days but has been doing python for over a decade, trying to get up and running with a modern js environment seems totally cray cray to me.
Usually, for me, I start by installing node. Ok, so I guess I need to install npm now. No problem, I guess that's like pip. Oh, I need yarn. It's better? Ok, I guess python had the same growing pains with easy_install. Oh, looks like when I installed npm I used sudo, so now I need to fix file permissions burried somewhere in my file system. Okay, I guess. At least when I get this running things will be a little better.
Oh, I need bundler? I guess that makes sense. Gotta configure a build system. Programing languages need build systems if you are creating distributable assets. Makes sense so far.
Oh, I guess I should have used webpack. Okay, lessons learned. I guess since I am using ES6 features I need something called babel too. Cute name for a transpiler, btw.
Oh no, I guess that 4 month old tutorial I followed that showed me how to set up babel with webpack used the old plug-in names. They are different now. Thats interesting. Gotta move fast, tho. I guess...
Huh, it still isn't working. The 6 different config files all look right. Oh, wow. Turns out that the behavior is different if I wrote the config files in json vs yaml vs pure js. Guess I gotta rewrite them in pure js to get at the real shit.
Okay, seems like I got all that mess sorted out. Let's add a few libraries to my packages manifest...
Huh, the docker containers are taking an awful long time to build suddenly, I wonder why that -- WHY THE FUCK IS node_modules 7.5GB and contains 82000 files, aghhhhgh?!?!
(I kid, I kid. But not really)
I guess a lot of that is just cultural differences between js and python communities, but as someone who considers themselves a reasonably competent programmer, trying to get onboard just seems like too much.
Contrast that with something like Rust, which I have also been trying to learn. Rust is positively delightful by comparison. I spent a cumulative total of 15 mins getting an environment set up. Which means I get more time to actually learn how to work with the language itself, instead of setting up tooling.
Maybe it will sort itself out a little as the node community matures and settles on what the right way to do things is, but for now, it's so much work to even get started.
- btashton 8y agoThis is exactly how I feel every time I try and use some project using React or other project using "modern" JavaScript/Typescript. I have seen the impressive things people have done with this to solve real problems, but really I have found it to be super unapproachable, and I say this as someone that has picked up a fair amount of low and high level langauges. I want to like it, but I get turned away before I have written any code.
- TeMPOraL 8y agoSeconded. I keep going back to the modern JS world every couple months, because either the job or a side project requires it. And I still can't get used to things. I still remember my first attempt, years ago. I shopped around for front-end frameworks, and picked Ember, which was in vogue then. I proceeded to create a default "hello world" with ember-cli, only to discover the newly generated project had ~70k files in 150k folders. I bailed out immediately and went back to jQuery. The situation in Node-land is much improved now, but I'm still uncomfortable with so many moving parts you have there, all constantly changing, which can - and do frequently - break at any moment. And just when I think I finally have things under control, my professional front-end developer friend comes out and says, "no no no, you're doing it wrong; throw out library X and use Y instead, add webpack, and while you're at it, use Yarn, and here you have this config which adds a newest linter...".
- lacker 8y agoNowadays there are usually better tools than the process you describe here. For example if you are making a React application you can start off with the `create-react-app` tool. If you're using Vue then `vue create <appname>` is similar. They will take care of the bundling and providing a modern language environment for you.
- disiplus 8y agotrue, but if you are doing anything more complex you have to change some of the things or ad others, and you end up on the same path as OP, there is no way around learning all this if you intent to build something for production with JS. i, as a person that writes backend for 3-4 months and then need to do frontend hate the constant changing.
- z3t4 8y agoNode.JS is good enough to use as is without any compile to JS or frameworks in between. It is very nice to write a server or network tool in JavaScript. If you want to use it as front-end glue you can still stay lean, just use the built-in http module, or npm install SockJS or other websocket module to communicate with the web page, which you also can write without any frameworks or build tools.
- tekkk 8y agoWell sure if this is your first time installing programming environment it might seem much. Now compare the same to C++, Java, Python, Go etc. They all have their own set of problems. Rust, well Rust has a good package manager. But I wouldn't go beyond that suggesting it be "beginner-friendly". That's a high mountain to climb even for experienced programmer. And npm is always installed alongside Node.js which I suggest installing by nvm. I guess this depends a lot on the level of assistance you can get with the installation process. Using sudo is almost always a dumb idea for installing anything. I admit frontend development with JS/TS is tricky business that I myself also abhor at times. When everything works it's fine but when it doesn't well. I'll be pulling my hair for a while, then trying to Google the issue which often works btw. The one of the biggest perks of a big ecosystem (with many beginner programmers) is that there is plenty of help for almost any problem. Once you get past your guttural "Node.js/JS sucks because of this and this" I find it to be (with TypeScript) a productive and fairly simple ecosystem. I haven't noticed big of a problem with newbie programmers starting to learn Node.js once you give them good enough tutoring. Webpack is not something you want to introduce them to for a long time (unless necessary) and yeah, it's a pain in the ass.
- joepie91_ 8y agoThe problem with your reasoning: none of this is actually necessary, short of npm, so this is absolute nonsense. Like, I realize that these "you need so many things!!1!" narratives are popular ways to complain about JS, but if you're adding random junk to your project without a clear reason for it, that's really your responsibility and yours alone.
- danShumway 8y agoThis is not a criticism, I totally get why you feel that way and it's not your fault. However, if you or someone else is reading this and thinking, "well, that's just what I'll have to deal with to get started in JS", heck with that crap. There is a huge portion of the community that pushes people in this direction, and you don't need to go in that direction. You should ignore them. If you're running your code within the browser, then first take a step back and ask yourself if you even need npm or node. Remember, all Node does is give you the ability to run JS code with access to your filesystem/native processes. I hand-code sites all the time, because it's fast. You don't have a build step, you use the built in browser dev tools to debug, and you just hit F5 and see your changes instantly. You can do TDD from a browser without installing Node. It's pretty easy actually, you don't even need a testing framework. Make a separate page that includes one script with all of your tests. The only big concern is importing headers into multiple files, but remember that you can always just fall back on the Linux commands that you already know: rm -r ./public && mkdir ./public && cp -a ./site/. ./public find ./public -type f -name '*.html' -exec sed -i '/<!--importheader-->/r ./templates/header.html' {} \; Of course, this doesn't scale particularly well. But why the heck are you worried about scaling right now? You can add a build step later. You can download Mocha later. Nothing you're doing at this stage will prevent you from making that decision in the future when you're more informed. So why are you worrying about things that aren't problems yet? Okay, so say you really want to do a build step. You're want to write SASS instead of CSS or something. First, there are command line compilers for SASS that don't require you to install Node or npm. Remember, all that Node does is it gives you the ability to run JS in your native environment. But let's say that really want to use Node for this, or let's say you're explicitly trying to build a Node application. Install nvm[0]. This will handle setting up node and npm and all of the linking and whatever; especially on systems like Ubuntu, it's just better than using the package manager and linking everything yourself. Do not worry about yarn, it is not appreciably better unless you're working with a massive number of packages. Don't work with a massive number of packages. If you're here because you just want to write a Node app and not because you're building a build tool, then don't install a build system. You don't need one. Most of the modern ES6 features are available in most modern versions of Node, and you can set a lower limit for what you support if you're planning on mass-distributing what you make. Remember, if this becomes a problem later, you can add Babel then. Transpilation won't require you to rewrite your entire codebase. You don't have to care about this until after it becomes a problem. When testing or building your code, consider using a low level tool that shows you what's happening, or writing your own. It doesn't even need to be JS. I have, in the past, done bundling by literally just concatenating files together. I have also built HTML template systems in Node that were literally just a file read, a few regex expressions, and then a file write. Ask yourself, "what does this tool actually need to do?" Some of the biggest tools in JS are built on concepts that are actually not all that complicated to understand or replicate. This seems like a very extreme perspective, but the modern JS ecosystem is based around, "We're going to build a bunch of high-level tools so that nobody has to think about the underlying mechanics of any of this." The problem with that mentality is that the high level tools change all the time, and when they do change, all of the experience you have with the old API is useless. So you end up with a bunch of opinion pieces being written about how everybody needs to switch to this tool or that tool, and new users who have no context to figure out which ones are important. Tools are important, I like them. I use them. But I only add them when I have need. When I start a new node project, I don't install anything. At most, if I'm doing TDD, I install a very small, minimal testing framework that doesn't come with any special config files or anything. Then later on, I start looking at tools when I have a specific, well-defined problem that I need solved. What you have to understand is that JS is very flexible, and because your build tools and IDEs and whatever are all written in JS, the temptation is always there to say, "I'm going to build some type of meta-system on top of this other meta-system because I don't like this specific thing." That's not necessarily bad, but it is very hard to avoid that mentality, and it means that large swaths of the online community think that an introduction to testing means, "here's how you install Mocha", and not, "let's learn how test runners actually work." So it's completely understandable why people feel overwhelmed, but the good news is that it's possible to ignore those people and actually just write Javascript, and in the long run doing so will make you a better developer because you'll spend less time trying to figure out what the flavor of the week tool is. I love the JS community, but I dislike this aspect of it. I wish we spent more time questioning some of the tools we use. [0]: https://github.com/creationix/nvm https://github.com/creationix/nvm