What is npm
npm stands for Node Package Manager. It’s a library and registry for JavaScript software
packages.
npm also has command-line tools to help you install the different packages and manage their
dependencies.
npm is free and relied on by over 11 million developers worldwide. You could say it’s kind of a
big deal. They’re open-source and have become the center of Javascript code sharing. There are
more than a million packages available on npm.
What is Node.js?
Node.js is a runtime environment that allows you to run JavaScript on the backend.
A runtime environment is like a small operating system. It provides all the functionality needed
for a program to run. Node came on the scene because JavaScript used to only work in the web
browser. This is because browsers contain an engine to translate JavaScript into code the
machine understands.
Originally the backend (i.e. data layer of an application) doesn’t have this engine. That’s
where Node.js comes in. It acts as a JavaScript engine that translates your code, allowing it to
be run on a physical machine.
If you’d like to learn more about it, check out my beginner’s guide to Node.js.
Okay, but how does that relate to npm? Basically, npm keeps track of all the packages (shared
code) you’re using.
In September 2022 over 2.1 million packages were reported being listed in the npm registry,
making it the biggest single language code repository on Earth, and you can be sure there is a
package for (almost!) everything.
july 13, 2023
npm can manage packages that are local dependencies of a particular project, as well as
globally-installed JavaScript tools.[30] When used as a dependency manager for a local project,
npm can install, in one command, all the dependencies of a project through the package.json
file.[31] In the package.json file, each dependency can specify a range of valid versions using
the semantic versioning scheme, allowing developers to auto-update their packages while at the
same time avoiding unwanted breaking changes.[32] npm also provides version-bumping tools for
developers to tag their packages with a particular version.[33] npm also provides the
package-lock.json[34] file which has the entry of the exact version used by the project after
evaluating semantic versioning in package.json.
july 13, 2023
- In March 2016, npm attracted press attention[8] after a package called left-pad, which many
popular JavaScript packages depended on, was unpublished as the result of a naming dispute
between Azer Koçulu, a self-taught software engineer, and Kik.[9][10] Although the package
was republished three hours later, it caused widespread disruption, leading npm to change
its policies regarding unpublishing to prevent a similar event in the future.
- In February 2018, an issue was discovered in version 5.7.0 in which running sudo npm on
Linux systems would change the ownership of system files, permanently breaking the operating
system.
- In July 2018, the npm credentials of a maintainer of the popular eslint-scope package were
compromised resulting in a malicious release of eslint-scope, version 3.7.2. The malicious
code copied the npm credentials of the machine running eslint-scope and uploaded them to the
attacker.
- In November 2018, it was discovered that a malicious package had been added as a dependency
to version 3.3.6 of the popular package event-stream. The malicious package, called
flatmap-stream, contained an encrypted payload that stole bitcoins from certain
applications. npm administrators removed the offending package.
- In March 2022, developer Brandon Nozaki Miller released a version of the package node-ipc
containing malicious code that would delete files from users with Belarusian and Russian IP
addresses, in protest of the Russian invasion of Ukraine. Vue.js, which uses node-ipc as a
dependency, did not pin its dependencies to a safe version, meaning that some users of
Vue.js became affected by the malicious package if the dependency was fetched as the latest
package.[19][20] The affected dependency was also briefly present in version 3.1 of Unity
Hub; a hotfix was released the same day to remove the issue, however.