Difference between a repl (in the replit website), an npm and Node.js?

Hi all

I am now starting the projects and it is still unclear to me what each one of those things is and does.

At the moment my poor understanding is:

  • ‘replit’ is the name of a website that stores ‘repl’ folders
  • a ‘repl’ is a folder with files inside that, when run together, form a website/web app
  • ‘node.js’ is a subcategory of the javascript language (like React), so it is another library, and it is the language I am writing things in within the files in the ‘repl’
  • ‘npm’, no clue

I realise these definitions are wrong, but they are definitions I understand.

When I read things like:

  • ‘npm’ is a “package manager for the JavaScript programming language” that doesn’t mean anything to me as I do not know what a package or a package manager is.
  • ‘Node.js’ being a “runtime” that doesn’t help either as I don’t know what that is or how it is connected to ‘npm’, ‘repl’ or anything

Could someone please explain as simply as possible what each thing is and how it is connected to the others?

Analogies (like the one I once read about an API being like a waiter that takes my order from my computer to a server and returns food/data) are appreciated

Thanks for your time

Jaime

Your code so far

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36

Challenge: Timestamp Microservice

Link to the challenge:

1 Like

Hello there,

I would say most of your definitions are fine. I would clarify:

Node.js is a runtime for JavaScript - not like React. Best way I understand it is that it is synonymous to a compiler for JavaScript. That is, browsers come with built in compilers for JS, but, if you want to run JS outside of a browser, you need something like Nodejs.

A package is a packaged library. So, you know what a library is…well, package it (make into an easily transferable file/s).
A package manager is a tool for handling one or more packages (libraries). NPM makes installing, deleting, bundling, packaging, and publishing libraries very easy.

Analogies… :thinking:

  • Nodejs is like a lake for your boat (app), when you do not want to take her out on the ocean (browser)
  • NPM is like Amazon who does not make the appliances, but has a huge stock of ready made items, and you (dev) just order what you want.

I guess I am not as good with analogies as I thought

Anyway, hope this helps some. The more you use the tools, the more what they are just fits into place.

3 Likes

A REPL (Read Eval Print Loop) is a program (well, a programming environment) that you type an expression into and it prints the result. So console programs, ones you use via a terminal, they often work like this. For example, if you install Node and then type node (just that) into a terminal, the thing you installed includes a program called node which will open a REPL if you execute it on its own.

As an aside, the language which introduced repls allows you to do this against code that is running, ie you can rewrite the program while you run it: most other languages and environments that have a REPL do not allow this.

repl.it is just a website/app that lets you use different programming languages. You interact with them via a repl, that’s why it’s called replit.

JavaScript (or any programming language) needs something that takes the code and translates it into code the computer understands, into machine code. If you use JavaScript in a browser, the browser already includes that functionality. If you want to use JavaScript outside of a browser, you need something to translate it to machine code, to run the JavaScript you’ve written. Node does that.

Edit: to simplify, it’s the bit of Chrome that deals with JavaScript extracted into a seperate program so that you can run JS code without having a browser open.

You don’t really want to write every single piece of functionality yourself. Otherwise, for example, to complete these projects you’d need to write programs that tested your code. You just want to be able to use some library of code someone else wrote that has all the stuff you need to write tests.

There are lots and lots of libraries available. Node comes with a way to manage installing, uninstalling, updating etc those libraries, Node Package Manager, NPM. It is another program you get when you install Node: you type npm along with some commands specifying what you want to do into a console

3 Likes

Hi @Sky020

Your analogies are the bits I found most useful from your post!

I was wondering if you can think of one that actually links Node.js and npm, as you have given two separate analogies.

If Node.js is like a lake where I can try out the different boats I build, is npm like a shop where I can buy ready made boats (i.e apps) or ready made boat parts like a mast (i.e sections of code for an app)? Or is npm like a collection of different lakes?

If in the analogy the thing that lets you run JavaScript code (Node, or a browser) is the lake and your program is the boat, then NPM is a warehouse where you can get premade bits for your boat.

This analogy falls down a little bit because NPM

  1. is commonly used as the name of the warehouse itself, but
  2. is actually the name of the program that interacts with the warehouse, and
  3. doesn’t just interact with the warehouse, it is the tool you use to handle other common tasks necessary for keeping your boat maintained

Edit: uurgh so to keep going with this analogy. A JS project (specifically a Node project, but IRL that covers most JS projects because most JS projects use Node even if only to do things like run tests) is your boat.

More specifically, and again this is where the analogy falls down, it is a component of a boat. That component may itself be a complete, fully functional boat, but it’s still a component. The reason for the distinction is

Your project has a manifest (actually a manifest, that is not an analogy), which is a file called package.json.

So does every single other boat component in the warehouse. What npm (the program) does is that it checks that manifest and does some jobs based on what’s written in it.

So if your manifest says “I require a mast and a rudder” then when you tell it to, npm will go and get those things from the warehouse. If the mast’s manifest says “I require a sail and some ropes”, then those will also get collected from the warehouse at the same time

To skip out of the analogies for a bit, here’s some info directly from npmjs.com’s about page on what npm is:

npm, Inc. is a company founded in 2014, and was acquired by GitHub in 2020. npm is a critical part of the JavaScript community and helps support one of the largest developer ecosystems in the world.

npm is lots of things.

- npm is the package manager for Node.js. It was created in 2009 as an open source project to help JavaScript developers easily share packaged modules of code.

- The npm Registry is a public collection of packages of open-source code for Node.js, front-end web apps, mobile apps, robots, routers, and countless other needs of the JavaScript community.

- npm is the command line client that allows developers to install and publish those packages.

So yea the term npm has multiple meanings depending on the context. Other languages have their own “package managers” as the pattern is very common in software that all boils down to being able to leverage other peoples code to solve the same problems.

2 Likes

Hi @DanCouper

Thanks for your detailed response

To connect this to the analogy for the sake of my understanding, ‘npm’ is therefore the name of the guy who works at the ‘npm’ warehouse (he gave is warehouse his own name, like the guy who founded McDonald’s) by the lake.

If you ask him for a component for your boat he fetches it for you inside the warehouse and gives it to you to do as you please with it.

Additionally, if you ask him to do some maintenance work on your boat he’ll also do that for you if need be, as he knows a lot about boats.

Are there any big holes in this analogy?

I mean all analogies are bad, but yes…I guess so.

What @bradtaniguchi posted is good, that’s the reality of what it is. Almost evey piece of software tech of a significant enough scope (eg programming languages, operating systems) has a package manager: that’s essentially what the app stores are, for example. NPM is just a different scope, for a programming language & environment rather than an operating system.