npm & package management in nodejs
basic · Node.js — Server-side JavaScript
The package.json file is the heart of every Node.js project. It is a JSON manifest that defines the metadata, dependencies, and scripts required to run and manage your application. 1. Creating the File You can generate this file automatically by running: npm init : Asks a series of questions to set up the file. npm init -y : Skips the questions and generates a file with default val 2. Essential Metadata Fields These fields identify your project and are required if you intend to publish your code as a package. name : The unique name of your project (lowercase, no spaces). version : Following Semantic Versioning (e.g., 1.0.0 ). description : A short summary of what the project does. main : The entry point of your application (usually index.js or app.js ). This is the file that runs when someone calls your package. 3. Dependency Management This is where you track the third-party modules your project needs. dependencies : Modules required for the application to run in production (e.g., express , mongoose ). devDependencies : Modules only needed during development (e.g., nodemon , jest , eslint ). These are not installed when the app is deployed to production. peerDependencies : Used by library authors to specify that their package is compatible with a specific version of another package (like a React plugin needing a certain version of React). 4. Scripts Field The scripts field allows you to define terminal commands as aliases. This is the primary way developers automate tasks. 5. Configuration & Environment Fields type : Set this to "module" to enable ES Modules ( import/export ) or "commonjs" (default). engines : Specifies which versions of Node.js or npm your project works on. "engines": { "node": ">=18.0.0" } private : If set to true , it prevents the package from being accidentally published to the public npm registry. 6. The package-lock.json When you install a dependency, Node creates a package-lock.json file. Purpose: It records the exact version of every package and sub-dependency installed. Why it's important: It ensures that every developer on your team (and your production server) installs the exact same code, preventing "it works on my machine" errors caused by version mismatches. Summary of Key Differences dependencies vs. devDependencies dependencies are for the code your app needs to function (the engine). devDependencies are for the tools you use to build it (the wrench). scripts Think of scripts as "short-cuts." Instead of typing long, complex terminal commands every time, you save them here for quick execution. type This field determines the "language rules" of your project—whether you are writing modern ES Modules or traditional CommonJS.