[{"data":1,"prerenderedAt":-1},["Reactive",2],{"content-/articles/general/npm-install":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"_empty":6,"title":8,"description":9,"excerpt":10,"topic":21,"authors":22,"tags":26,"updatedAt":30,"createdAt":30,"body":31,"_type":930,"_id":931,"_source":932,"_file":933,"_extension":934},"/articles/general/npm-install","general",false,"","NPM Install","Ways to install dependencies with NPM",{"type":11,"children":12},"root",[13],{"type":14,"tag":15,"props":16,"children":17},"element","p",{},[18],{"type":19,"value":20},"text","Installing dependencies with NPM can be a little bit confusing if we don't know the caveats.","General",[23],{"name":24,"avatar":25},"Shaun Chong","levi.png",[27,28,29],"node","npm","javascript","2026-05-04T06:52:56.000Z",{"type":11,"children":32,"toc":919},[33,37,57,64,69,119,125,130,215,222,233,537,554,560,687,711,717,736,753,769,805,820,844,872,883,897,903,912],{"type":14,"tag":15,"props":34,"children":35},{},[36],{"type":19,"value":20},{"type":14,"tag":15,"props":38,"children":39},{},[40,42,48,50,55],{"type":19,"value":41},"There are two commands that allows us to install dependencies from the NPM repository. They are ",{"type":14,"tag":43,"props":44,"children":45},"code-inline",{},[46],{"type":19,"value":47},"npm install",{"type":19,"value":49}," and ",{"type":14,"tag":43,"props":51,"children":52},{},[53],{"type":19,"value":54},"npm ci",{"type":19,"value":56},".",{"type":14,"tag":58,"props":59,"children":61},"h2",{"id":60},"npm-install-general-development",[62],{"type":19,"value":63},"npm install (General Development)",{"type":14,"tag":15,"props":65,"children":66},{},[67],{"type":19,"value":68},"This command is used for developers when developing locally or to update the dependencies.",{"type":14,"tag":70,"props":71,"children":72},"ul",{},[73,92,109],{"type":14,"tag":74,"props":75,"children":76},"li",{},[77,83,85,90],{"type":14,"tag":78,"props":79,"children":80},"strong",{},[81],{"type":19,"value":82},"Function",{"type":19,"value":84},": Reads ",{"type":14,"tag":43,"props":86,"children":87},{},[88],{"type":19,"value":89},"package.json",{"type":19,"value":91}," to determine which dependencies to install. It can install new packages and update existing ones to newer versions within specified ranges (e.g., ^1.2.3).",{"type":14,"tag":74,"props":93,"children":94},{},[95,100,102,107],{"type":14,"tag":78,"props":96,"children":97},{},[98],{"type":19,"value":99},"Modifications",{"type":19,"value":101},": It frequently updates your ",{"type":14,"tag":43,"props":103,"children":104},{},[105],{"type":19,"value":106},"package-lock.json",{"type":19,"value":108}," file to reflect the specific versions it just installed.",{"type":14,"tag":74,"props":110,"children":111},{},[112,117],{"type":14,"tag":78,"props":113,"children":114},{},[115],{"type":19,"value":116},"Speed",{"type":19,"value":118},": Generally slower because it must resolve dependencies and may perform network requests to find newer version",{"type":14,"tag":58,"props":120,"children":122},{"id":121},"npm-ci-automated-environments",[123],{"type":19,"value":124},"npm ci (Automated Environments)",{"type":14,"tag":15,"props":126,"children":127},{},[128],{"type":19,"value":129},"Stands for \"Clean Install.\" This command is used in the CI/CD environment to install the dependencies that are deterministic and reliable.",{"type":14,"tag":70,"props":131,"children":132},{},[133,161,183,200],{"type":14,"tag":74,"props":134,"children":135},{},[136,140,142,146,148,152,154,159],{"type":14,"tag":78,"props":137,"children":138},{},[139],{"type":19,"value":82},{"type":19,"value":141},": Ignores the ",{"type":14,"tag":43,"props":143,"children":144},{},[145],{"type":19,"value":89},{"type":19,"value":147}," and installs dependencies directly from the ",{"type":14,"tag":43,"props":149,"children":150},{},[151],{"type":19,"value":106},{"type":19,"value":153}," (or ",{"type":14,"tag":43,"props":155,"children":156},{},[157],{"type":19,"value":158},"npm-shrinkwrap.json",{"type":19,"value":160},")",{"type":14,"tag":74,"props":162,"children":163},{},[164,169,171,175,177,182],{"type":14,"tag":78,"props":165,"children":166},{},[167],{"type":19,"value":168},"Strictness",{"type":19,"value":170},": It requires a lockfile to exist and will throw an error if ",{"type":14,"tag":43,"props":172,"children":173},{},[174],{"type":19,"value":89},{"type":19,"value":176}," and the lockfile are ",{"type":14,"tag":78,"props":178,"children":179},{},[180],{"type":19,"value":181},"out of sync",{"type":19,"value":56},{"type":14,"tag":74,"props":184,"children":185},{},[186,191,193,198],{"type":14,"tag":78,"props":187,"children":188},{},[189],{"type":19,"value":190},"Clean State",{"type":19,"value":192},": It automatically deletes the ",{"type":14,"tag":43,"props":194,"children":195},{},[196],{"type":19,"value":197},"node_modules",{"type":19,"value":199}," folder before starting to ensure a fresh, predictable installation.",{"type":14,"tag":74,"props":201,"children":202},{},[203,207,209,213],{"type":14,"tag":78,"props":204,"children":205},{},[206],{"type":19,"value":116},{"type":19,"value":208},": Typically faster than ",{"type":14,"tag":43,"props":210,"children":211},{},[212],{"type":19,"value":47},{"type":19,"value":214}," because it skips version resolution and does not update the lockfile",{"type":14,"tag":216,"props":217,"children":219},"h3",{"id":218},"out-of-sync-error",[220],{"type":19,"value":221},"Out-of-sync Error",{"type":14,"tag":15,"props":223,"children":224},{},[225,227,231],{"type":19,"value":226},"This is a recent error that I faced while trying to run ",{"type":14,"tag":43,"props":228,"children":229},{},[230],{"type":19,"value":54},{"type":19,"value":232}," in the CI/CD pipeline.",{"type":14,"tag":234,"props":235,"children":240},"code",{"className":236,"code":238,"language":239,"meta":7},[237],"language-log","\"C:\\Windows\\system32\\cmd.exe\" /D /E:ON /V:OFF /S /C \"CALL \"D:\\agent\\_work\\_temp\\6d22faac-2828-45d6-9ee5-b47ff7afc488.cmd\"\"\nnpm error code EUSAGE\nnpm error\nnpm error `npm ci` can only install packages when your package.json and package-lock.json or npm-shrinkwrap.json are in sync. Please update your lock file with `npm install` before continuing.\nnpm error\nnpm error Missing: @emnapi/core@1.9.2 from lock file\nnpm error Missing: @emnapi/runtime@1.9.2 from lock file\nnpm error Missing: chokidar@5.0.0 from lock file\nnpm error Missing: chokidar@5.0.0 from lock file\nnpm error Missing: @types/node@25.6.0 from lock file\nnpm error Missing: chokidar@5.0.0 from lock file\nnpm error Missing: @types/node@25.6.0 from lock file\nnpm error Missing: chokidar@5.0.0 from lock file\nnpm error\nnpm error Clean install a project\nnpm error\nnpm error Usage:\nnpm error npm ci\nnpm error\nnpm error Options:\nnpm error [--install-strategy \u003Choisted|nested|shallow|linked>] [--legacy-bundling]\nnpm error [--global-style] [--omit \u003Cdev|optional|peer> [--omit \u003Cdev|optional|peer> ...]]\nnpm error [--include \u003Cprod|dev|optional|peer> [--include \u003Cprod|dev|optional|peer> ...]]\nnpm error [--strict-peer-deps] [--foreground-scripts] [--ignore-scripts] [--no-audit]\nnpm error [--no-bin-links] [--no-fund] [--dry-run]\nnpm error [-w|--workspace \u003Cworkspace-name> [-w|--workspace \u003Cworkspace-name> ...]]\nnpm error [-ws|--workspaces] [--include-workspace-root] [--install-links]\nnpm error\nnpm error aliases: clean-install, ic, install-clean, isntall-clean\nnpm error\nnpm error Run \"npm help ci\" for more info\nnpm error A complete log of this run can be found in: C:\\Users\\User\\AppData\\Local\\npm-cache\\_logs\\2026-04-10T05_56_48_557Z-debug-0.log\n##[error]Cmd.exe exited with code '1'.\n","log",[241],{"type":14,"tag":242,"props":243,"children":244},"pre",{},[245],{"type":14,"tag":234,"props":246,"children":247},{"__ignoreMap":7},[248,259,268,277,286,294,303,312,321,329,338,346,354,362,370,379,387,396,405,413,422,431,440,449,458,467,476,485,493,502,510,519,528],{"type":14,"tag":249,"props":250,"children":253},"span",{"class":251,"line":252},"line",1,[254],{"type":14,"tag":249,"props":255,"children":256},{},[257],{"type":19,"value":258},"\"C:\\Windows\\system32\\cmd.exe\" /D /E:ON /V:OFF /S /C \"CALL \"D:\\agent\\_work\\_temp\\6d22faac-2828-45d6-9ee5-b47ff7afc488.cmd\"\"\n",{"type":14,"tag":249,"props":260,"children":262},{"class":251,"line":261},2,[263],{"type":14,"tag":249,"props":264,"children":265},{},[266],{"type":19,"value":267},"npm error code EUSAGE\n",{"type":14,"tag":249,"props":269,"children":271},{"class":251,"line":270},3,[272],{"type":14,"tag":249,"props":273,"children":274},{},[275],{"type":19,"value":276},"npm error\n",{"type":14,"tag":249,"props":278,"children":280},{"class":251,"line":279},4,[281],{"type":14,"tag":249,"props":282,"children":283},{},[284],{"type":19,"value":285},"npm error `npm ci` can only install packages when your package.json and package-lock.json or npm-shrinkwrap.json are in sync. Please update your lock file with `npm install` before continuing.\n",{"type":14,"tag":249,"props":287,"children":289},{"class":251,"line":288},5,[290],{"type":14,"tag":249,"props":291,"children":292},{},[293],{"type":19,"value":276},{"type":14,"tag":249,"props":295,"children":297},{"class":251,"line":296},6,[298],{"type":14,"tag":249,"props":299,"children":300},{},[301],{"type":19,"value":302},"npm error Missing: @emnapi/core@1.9.2 from lock file\n",{"type":14,"tag":249,"props":304,"children":306},{"class":251,"line":305},7,[307],{"type":14,"tag":249,"props":308,"children":309},{},[310],{"type":19,"value":311},"npm error Missing: @emnapi/runtime@1.9.2 from lock file\n",{"type":14,"tag":249,"props":313,"children":315},{"class":251,"line":314},8,[316],{"type":14,"tag":249,"props":317,"children":318},{},[319],{"type":19,"value":320},"npm error Missing: chokidar@5.0.0 from lock file\n",{"type":14,"tag":249,"props":322,"children":324},{"class":251,"line":323},9,[325],{"type":14,"tag":249,"props":326,"children":327},{},[328],{"type":19,"value":320},{"type":14,"tag":249,"props":330,"children":332},{"class":251,"line":331},10,[333],{"type":14,"tag":249,"props":334,"children":335},{},[336],{"type":19,"value":337},"npm error Missing: @types/node@25.6.0 from lock file\n",{"type":14,"tag":249,"props":339,"children":341},{"class":251,"line":340},11,[342],{"type":14,"tag":249,"props":343,"children":344},{},[345],{"type":19,"value":320},{"type":14,"tag":249,"props":347,"children":349},{"class":251,"line":348},12,[350],{"type":14,"tag":249,"props":351,"children":352},{},[353],{"type":19,"value":337},{"type":14,"tag":249,"props":355,"children":357},{"class":251,"line":356},13,[358],{"type":14,"tag":249,"props":359,"children":360},{},[361],{"type":19,"value":320},{"type":14,"tag":249,"props":363,"children":365},{"class":251,"line":364},14,[366],{"type":14,"tag":249,"props":367,"children":368},{},[369],{"type":19,"value":276},{"type":14,"tag":249,"props":371,"children":373},{"class":251,"line":372},15,[374],{"type":14,"tag":249,"props":375,"children":376},{},[377],{"type":19,"value":378},"npm error Clean install a project\n",{"type":14,"tag":249,"props":380,"children":382},{"class":251,"line":381},16,[383],{"type":14,"tag":249,"props":384,"children":385},{},[386],{"type":19,"value":276},{"type":14,"tag":249,"props":388,"children":390},{"class":251,"line":389},17,[391],{"type":14,"tag":249,"props":392,"children":393},{},[394],{"type":19,"value":395},"npm error Usage:\n",{"type":14,"tag":249,"props":397,"children":399},{"class":251,"line":398},18,[400],{"type":14,"tag":249,"props":401,"children":402},{},[403],{"type":19,"value":404},"npm error npm ci\n",{"type":14,"tag":249,"props":406,"children":408},{"class":251,"line":407},19,[409],{"type":14,"tag":249,"props":410,"children":411},{},[412],{"type":19,"value":276},{"type":14,"tag":249,"props":414,"children":416},{"class":251,"line":415},20,[417],{"type":14,"tag":249,"props":418,"children":419},{},[420],{"type":19,"value":421},"npm error Options:\n",{"type":14,"tag":249,"props":423,"children":425},{"class":251,"line":424},21,[426],{"type":14,"tag":249,"props":427,"children":428},{},[429],{"type":19,"value":430},"npm error [--install-strategy \u003Choisted|nested|shallow|linked>] [--legacy-bundling]\n",{"type":14,"tag":249,"props":432,"children":434},{"class":251,"line":433},22,[435],{"type":14,"tag":249,"props":436,"children":437},{},[438],{"type":19,"value":439},"npm error [--global-style] [--omit \u003Cdev|optional|peer> [--omit \u003Cdev|optional|peer> ...]]\n",{"type":14,"tag":249,"props":441,"children":443},{"class":251,"line":442},23,[444],{"type":14,"tag":249,"props":445,"children":446},{},[447],{"type":19,"value":448},"npm error [--include \u003Cprod|dev|optional|peer> [--include \u003Cprod|dev|optional|peer> ...]]\n",{"type":14,"tag":249,"props":450,"children":452},{"class":251,"line":451},24,[453],{"type":14,"tag":249,"props":454,"children":455},{},[456],{"type":19,"value":457},"npm error [--strict-peer-deps] [--foreground-scripts] [--ignore-scripts] [--no-audit]\n",{"type":14,"tag":249,"props":459,"children":461},{"class":251,"line":460},25,[462],{"type":14,"tag":249,"props":463,"children":464},{},[465],{"type":19,"value":466},"npm error [--no-bin-links] [--no-fund] [--dry-run]\n",{"type":14,"tag":249,"props":468,"children":470},{"class":251,"line":469},26,[471],{"type":14,"tag":249,"props":472,"children":473},{},[474],{"type":19,"value":475},"npm error [-w|--workspace \u003Cworkspace-name> [-w|--workspace \u003Cworkspace-name> ...]]\n",{"type":14,"tag":249,"props":477,"children":479},{"class":251,"line":478},27,[480],{"type":14,"tag":249,"props":481,"children":482},{},[483],{"type":19,"value":484},"npm error [-ws|--workspaces] [--include-workspace-root] [--install-links]\n",{"type":14,"tag":249,"props":486,"children":488},{"class":251,"line":487},28,[489],{"type":14,"tag":249,"props":490,"children":491},{},[492],{"type":19,"value":276},{"type":14,"tag":249,"props":494,"children":496},{"class":251,"line":495},29,[497],{"type":14,"tag":249,"props":498,"children":499},{},[500],{"type":19,"value":501},"npm error aliases: clean-install, ic, install-clean, isntall-clean\n",{"type":14,"tag":249,"props":503,"children":505},{"class":251,"line":504},30,[506],{"type":14,"tag":249,"props":507,"children":508},{},[509],{"type":19,"value":276},{"type":14,"tag":249,"props":511,"children":513},{"class":251,"line":512},31,[514],{"type":14,"tag":249,"props":515,"children":516},{},[517],{"type":19,"value":518},"npm error Run \"npm help ci\" for more info\n",{"type":14,"tag":249,"props":520,"children":522},{"class":251,"line":521},32,[523],{"type":14,"tag":249,"props":524,"children":525},{},[526],{"type":19,"value":527},"npm error A complete log of this run can be found in: C:\\Users\\User\\AppData\\Local\\npm-cache\\_logs\\2026-04-10T05_56_48_557Z-debug-0.log\n",{"type":14,"tag":249,"props":529,"children":531},{"class":251,"line":530},33,[532],{"type":14,"tag":249,"props":533,"children":534},{},[535],{"type":19,"value":536},"##[error]Cmd.exe exited with code '1'.",{"type":14,"tag":15,"props":538,"children":539},{},[540,542,546,548,552],{"type":19,"value":541},"The fix is to remove ",{"type":14,"tag":43,"props":543,"children":544},{},[545],{"type":19,"value":106},{"type":19,"value":547}," and run ",{"type":14,"tag":43,"props":549,"children":550},{},[551],{"type":19,"value":47},{"type":19,"value":553}," locally to regenerate the fresh lock file before pushing it to the CI/CD to rerun again.",{"type":14,"tag":58,"props":555,"children":557},{"id":556},"comparison-summary",[558],{"type":19,"value":559},"Comparison Summary",{"type":14,"tag":561,"props":562,"children":563},"table",{},[564,593],{"type":14,"tag":565,"props":566,"children":567},"thead",{},[568],{"type":14,"tag":569,"props":570,"children":571},"tr",{},[572,579,586],{"type":14,"tag":573,"props":574,"children":576},"th",{"align":575},null,[577],{"type":19,"value":578},"Feature",{"type":14,"tag":573,"props":580,"children":581},{"align":575},[582],{"type":14,"tag":43,"props":583,"children":584},{},[585],{"type":19,"value":47},{"type":14,"tag":573,"props":587,"children":588},{"align":575},[589],{"type":14,"tag":43,"props":590,"children":591},{},[592],{"type":19,"value":54},{"type":14,"tag":594,"props":595,"children":596},"tbody",{},[597,616,634,652,669],{"type":14,"tag":569,"props":598,"children":599},{},[600,606,611],{"type":14,"tag":601,"props":602,"children":603},"td",{"align":575},[604],{"type":19,"value":605},"Primary Use Case",{"type":14,"tag":601,"props":607,"children":608},{"align":575},[609],{"type":19,"value":610},"Local development, adding packages",{"type":14,"tag":601,"props":612,"children":613},{"align":575},[614],{"type":19,"value":615},"CI/CD, production builds, team sync",{"type":14,"tag":569,"props":617,"children":618},{},[619,624,629],{"type":14,"tag":601,"props":620,"children":621},{"align":575},[622],{"type":19,"value":623},"Lockfile Dependency",{"type":14,"tag":601,"props":625,"children":626},{"align":575},[627],{"type":19,"value":628},"Can create or update it",{"type":14,"tag":601,"props":630,"children":631},{"align":575},[632],{"type":19,"value":633},"Requires it; never modifies it",{"type":14,"tag":569,"props":635,"children":636},{},[637,642,647],{"type":14,"tag":601,"props":638,"children":639},{"align":575},[640],{"type":19,"value":641},"Version Resolution",{"type":14,"tag":601,"props":643,"children":644},{"align":575},[645],{"type":19,"value":646},"Flexible (follows SemVer ranges)",{"type":14,"tag":601,"props":648,"children":649},{"align":575},[650],{"type":19,"value":651},"Strict (exact versions in lockfile)",{"type":14,"tag":569,"props":653,"children":654},{},[655,659,664],{"type":14,"tag":601,"props":656,"children":657},{"align":575},[658],{"type":19,"value":197},{"type":14,"tag":601,"props":660,"children":661},{"align":575},[662],{"type":19,"value":663},"Appends/updates existing files",{"type":14,"tag":601,"props":665,"children":666},{"align":575},[667],{"type":19,"value":668},"Deletes and reinstalls from scratch",{"type":14,"tag":569,"props":670,"children":671},{},[672,677,682],{"type":14,"tag":601,"props":673,"children":674},{"align":575},[675],{"type":19,"value":676},"Reproducibility",{"type":14,"tag":601,"props":678,"children":679},{"align":575},[680],{"type":19,"value":681},"Lower (versions may drift)",{"type":14,"tag":601,"props":683,"children":684},{"align":575},[685],{"type":19,"value":686},"Higher (deterministic builds)",{"type":14,"tag":15,"props":688,"children":689},{},[690,692,701,702,709],{"type":19,"value":691},"For official technical details, refer to the ",{"type":14,"tag":693,"props":694,"children":698},"a",{"href":695,"rel":696},"https://docs.npmjs.com/cli/v11/commands/npm-install",[697],"nofollow",[699],{"type":19,"value":700},"npm-install",{"type":19,"value":49},{"type":14,"tag":693,"props":703,"children":706},{"href":704,"rel":705},"https://docs.npmjs.com/cli/v11/commands/npm-ci",[697],[707],{"type":19,"value":708},"npm-ci",{"type":19,"value":710}," documentation on the npm Docs portal.",{"type":14,"tag":58,"props":712,"children":714},{"id":713},"dev-dependencies-vs-dependencies",[715],{"type":19,"value":716},"Dev Dependencies vs Dependencies",{"type":14,"tag":15,"props":718,"children":719},{},[720,722,727,729,734],{"type":19,"value":721},"The ",{"type":14,"tag":43,"props":723,"children":724},{},[725],{"type":19,"value":726},"dependencies",{"type":19,"value":728}," are the packages that are required to run or execute your program, whereas ",{"type":14,"tag":43,"props":730,"children":731},{},[732],{"type":19,"value":733},"devDependencies",{"type":19,"value":735}," are the packages or tools that is only needed when developing or during the build process.",{"type":14,"tag":15,"props":737,"children":738},{},[739,741,745,747,751],{"type":19,"value":740},"We can selectively install only ",{"type":14,"tag":43,"props":742,"children":743},{},[744],{"type":19,"value":726},{"type":19,"value":746}," or ",{"type":14,"tag":43,"props":748,"children":749},{},[750],{"type":19,"value":733},{"type":19,"value":752}," based on our needs.",{"type":14,"tag":15,"props":754,"children":755},{},[756,758,762,764,768],{"type":19,"value":757},"The commands below only install the ",{"type":14,"tag":43,"props":759,"children":760},{},[761],{"type":19,"value":726},{"type":19,"value":763}," in the ",{"type":14,"tag":43,"props":765,"children":766},{},[767],{"type":19,"value":197},{"type":19,"value":56},{"type":14,"tag":234,"props":770,"children":774},{"className":771,"code":773},[772],"language-undefined","npm install --production\n# or\nnpm install --omit=dev\n",[775],{"type":14,"tag":242,"props":776,"children":777},{},[778],{"type":14,"tag":234,"props":779,"children":780},{"__ignoreMap":7},[781,789,797],{"type":14,"tag":249,"props":782,"children":783},{"class":251,"line":252},[784],{"type":14,"tag":249,"props":785,"children":786},{},[787],{"type":19,"value":788},"npm install --production\n",{"type":14,"tag":249,"props":790,"children":791},{"class":251,"line":261},[792],{"type":14,"tag":249,"props":793,"children":794},{},[795],{"type":19,"value":796},"# or\n",{"type":14,"tag":249,"props":798,"children":799},{"class":251,"line":270},[800],{"type":14,"tag":249,"props":801,"children":802},{},[803],{"type":19,"value":804},"npm install --omit=dev",{"type":14,"tag":58,"props":806,"children":808},{"id":807},"package-lockjson-vs-shrinkwrapjson",[809,813,815],{"type":14,"tag":43,"props":810,"children":811},{},[812],{"type":19,"value":106},{"type":19,"value":814}," VS ",{"type":14,"tag":43,"props":816,"children":817},{},[818],{"type":19,"value":819},"shrinkwrap.json",{"type":14,"tag":15,"props":821,"children":822},{},[823,825,829,831,835,837,842],{"type":19,"value":824},"Shrinkwrap is a publishable version of ",{"type":14,"tag":43,"props":826,"children":827},{},[828],{"type":19,"value":106},{"type":19,"value":830},". This file will be published to NPM whereas ",{"type":14,"tag":43,"props":832,"children":833},{},[834],{"type":19,"value":106},{"type":19,"value":836}," does not. Hence, it ensures the installer of our package will get the ",{"type":14,"tag":78,"props":838,"children":839},{},[840],{"type":19,"value":841},"exact same version",{"type":19,"value":843}," of dependencies that we have installed.",{"type":14,"tag":15,"props":845,"children":846},{},[847,849,853,855,859,861,871],{"type":19,"value":848},"We can convert the ",{"type":14,"tag":43,"props":850,"children":851},{},[852],{"type":19,"value":106},{"type":19,"value":854}," into ",{"type":14,"tag":43,"props":856,"children":857},{},[858],{"type":19,"value":819},{"type":19,"value":860}," by running ",{"type":14,"tag":693,"props":862,"children":865},{"href":863,"rel":864},"https://docs.npmjs.com/cli/v11/commands/npm-shrinkwrap",[697],[866],{"type":14,"tag":43,"props":867,"children":868},{},[869],{"type":19,"value":870},"npm shrinkwrap",{"type":19,"value":56},{"type":14,"tag":15,"props":873,"children":874},{},[875,877,881],{"type":19,"value":876},"It is also a backward compatible solution for NPM 2-4. In general, we rarely need to use Shrinkwrap and stick to the good ol ",{"type":14,"tag":43,"props":878,"children":879},{},[880],{"type":19,"value":106},{"type":19,"value":882}," will do.",{"type":14,"tag":15,"props":884,"children":885},{},[886,888,895],{"type":19,"value":887},"There are once upon a time where I used ",{"type":14,"tag":693,"props":889,"children":892},{"href":890,"rel":891},"https://github.com/data-miner00/ng-hackernews/blob/angular12-archive/npm-shrinkwrap.json",[697],[893],{"type":19,"value":894},"shrinkwrap",{"type":19,"value":896}," in my project to resolve an issue with the CI, but I think there should be a better way to get around it.",{"type":14,"tag":58,"props":898,"children":900},{"id":899},"reference",[901],{"type":19,"value":902},"Reference",{"type":14,"tag":904,"props":905,"children":911},"apa-reference",{":authors":906,"date":907,"source":908,"title":909,"url":910},"[\"Doumbouya, S.\",\"Ward, B\"]","2025, May 20","websites","npm install vs. npm ci","https://www.baeldung.com/ops/npm-install-vs-npm-ci",[],{"type":14,"tag":904,"props":913,"children":918},{":authors":914,"date":915,"source":908,"title":916,"url":917},"[\"Amery, M\"]","2021, March 30","What is the difference between npm-shrinkwrap.json and package-lock.json?","https://stackoverflow.com/questions/44258235/what-is-the-difference-between-npm-shrinkwrap-json-and-package-lock-json",[],{"title":7,"searchDepth":261,"depth":261,"links":920},[921,922,925,926,927,929],{"id":60,"depth":261,"text":63},{"id":121,"depth":261,"text":124,"children":923},[924],{"id":218,"depth":270,"text":221},{"id":556,"depth":261,"text":559},{"id":713,"depth":261,"text":716},{"id":807,"depth":261,"text":928},"package-lock.json VS shrinkwrap.json",{"id":899,"depth":261,"text":902},"markdown","content:articles:general:npm-install.md","content","articles/general/npm-install.md","md"]