package.json is not enough

Sdílet
Vložit
  • čas přidán 22. 08. 2024

Komentáře • 127

  • @hnasr
    @hnasr  Před 2 lety +6

    Head to database.husseinnasser.com for a discount coupon to my Introduction to Database Engineering course. Link redirects to udemy with coupon applied.

  • @ShamilSattarov
    @ShamilSattarov Před 2 lety +262

    Some people think that 'npm ci' stands for "continious integration" because it mostly appears in CI build scripts. But actually it stands for "clean install". Your welcome!

    • @amoodaa
      @amoodaa Před 2 lety +13

      Its not clean install, its simply used more in continuous integrations environments, yes it does a clean install, but its a clean install because your CI will always be a new "instance", but it also adheres strictly to the package-lock dependency versions, unlike npm install

    • @KingTheRat
      @KingTheRat Před 2 lety +37

      Just run "npm ci -h" and you will see what it is.
      npm ci
      Install a project with a clean slate
      Usage:
      npm ci
      Options:
      [--no-audit] [--ignore-scripts] [--script-shell ]
      aliases: clean-install, ic, install-clean, isntall-clean
      Run "npm help ci" for more info

    • @davisdimalen3912
      @davisdimalen3912 Před 2 lety +1

      @@KingTheRat Ah the wonders of the internet. :) Thanks for this valuable information.

    • @flannelbeard4621
      @flannelbeard4621 Před 2 lety +2

      ... who tf assumed it meant "continuous integration"? No real developer would think that. Seriously. That's ridiculous.

    • @mayursinhsarvaiya9302
      @mayursinhsarvaiya9302 Před 2 lety +8

      @@flannelbeard4621 Me.
      I assumed it as continuous integration, seriously.

  • @TomDoesTech
    @TomDoesTech Před 2 lety +42

    Great video. One command that I use to debug my packages is npm why or yarn why, shows you the dependancy graph for a given dependancy, so you can see why it was installed.

    • @sidwebworks9871
      @sidwebworks9871 Před 2 lety +2

      I see you've reached to this video even before me 😂

    • @RyanKOnk
      @RyanKOnk Před 2 lety +3

      I watch your videos here and there. Good content

    • @TomDoesTech
      @TomDoesTech Před 2 lety +3

      @@sidwebworks9871 You've got to be quick!

  • @ADPenrose
    @ADPenrose Před 7 měsíci +1

    I spent months reading articles and watching videos, and none of it stuck. Hands down, the best explanation on the topic. You're doing God's work here mate!

  • @chungweileong
    @chungweileong Před 2 lety +17

    This is definitely a good explanation!
    It’s frustrating when someone posted a solution for dependency related issue by removing the lock file, it get even worst especially when a package author decided to push a breaking change as a minor update.

  • @PenguinjitsuX
    @PenguinjitsuX Před 2 lety +1

    LOOL 4:03 "Keep the major version out of your F** mouth!" that made me laugh so hard

  • @zeroww7
    @zeroww7 Před 2 lety +4

    will-package-smith @4:04 reporting for slapping

    • @dr_davinci
      @dr_davinci Před 2 lety +1

      omg ! I didn't get the reference until I read your comment , and for that I thank you.

  • @ss-gc9qq
    @ss-gc9qq Před 2 lety +2

    I've come across this explanation before, but it never quite stuck. I appreciate your communication style, thanks!

  • @thetrends5670
    @thetrends5670 Před 2 lety +3

    "Keep the major version out of your f***ing mouth"
    - Nasser 2022

  • @SwapnilSoni
    @SwapnilSoni Před 2 lety +4

    Computer: knows 0 and 1
    Hussein sir: **pathetic**

  • @yadneshkhode3091
    @yadneshkhode3091 Před 2 lety +9

    Thank you 💗💗😊😊 sir because of your videos i am learning a lot recently I received 150% hike as Backend developer this had a positive impact on me and my family ❤️❤️
    Thank you once again

    • @sunjayarmstead
      @sunjayarmstead Před 2 lety

      Congrats to you! I too recently got a pay hike. Feels really validating.

  • @karim-gb5nx
    @karim-gb5nx Před 2 lety +1

    i just subbed because you said "KEEP THE MAJOR VERSION OUT OF YOUR F*ING MOUNTH !"

  • @SimonChikezie
    @SimonChikezie Před 7 měsíci

    thanks bro now i can never forget the difference

  • @anantharao2310
    @anantharao2310 Před 7 měsíci

    Hi. That was great explaination between package.json and package-lock.json files.
    Well done.

  • @hotharvey2
    @hotharvey2 Před 2 lety +4

    it's "set IN stone" imagine carving INto a stone is more permanent than drawing ON a stone ;) thanks for the video

  • @anupamchakrawarti1803
    @anupamchakrawarti1803 Před 2 lety +3

    Nicely explained, for the longest time I had doubts what the heck is package-lock.json or the yarn counterpart. Last week, I took some time to clear these doubts, good now. This video is now on my references list.
    And yes, English is hard 😢

  • @ngoako
    @ngoako Před 2 lety +3

    Good refresher 👌
    I read somewhere that the ci stands for clean install?

  • @udaynarayanmukherjee5208
    @udaynarayanmukherjee5208 Před 2 lety +5

    npm ci thing ... super cool.
    Also, if you had just given the exact version to package.json you wouldn't have to deal with package lock.
    In bigger projects, resolving merge conflicts when upgrading multiple packages would be a headache.
    So, I would suggest use exacts and use ~ only when u know u wudbe okay with minor upgrades

  • @sujeethes6534
    @sujeethes6534 Před 2 lety

    Thanks for adding humour in teaching

  • @dhillaz
    @dhillaz Před 2 lety +1

    This whole time I have been deleting package-lock.json just because VS Code complains about it too much. 😂

  • @PhilipLon7
    @PhilipLon7 Před 2 lety +2

    What I don't understand is, why they built npm so that "install" updates the packages.
    In my opinion it would be far more intuitive if only "update" updated packages and the package-lock.json file
    and "install" (or "restore") was the "ci" equivalent

  • @DerLuukee
    @DerLuukee Před 2 lety +2

    "Don't touch my minor" 😂

  • @Vietnamkid1993
    @Vietnamkid1993 Před 2 lety

    I recognized this name somewhere🤩Great nginx course on Udemy

  • @sunjayarmstead
    @sunjayarmstead Před 2 lety

    Hussein, this video is gold! Really well explained. I didn’t know about ‘npm ci’ - how handy! 👍🏽🔥

  • @harshitjoshi3082
    @harshitjoshi3082 Před 2 lety +1

    Ah that's the reason why everytime I contribute to a nodejs codebase, the package-lock.json changes appears in my commits ! Thanks for the video, Great content 🔥

  • @JohnDoe-bu3qp
    @JohnDoe-bu3qp Před 2 lety

    In: there are fish in the sea. On: there are boats on the sea. Over: Most commercial aircraft fly over the clouds. Above: Satellites are way above the clouds. Under: You find all kinds of things lost under a sofa. Beneath: If you dig enough, you might find crude oil beneath the ocean floor.

  • @bashar876
    @bashar876 Před 2 lety +2

    Thank you!!!!!! Super clear explanation.
    Please do one on peer dependencies in package lock json if you get the time and interest ❤️

  • @ericjing3138
    @ericjing3138 Před rokem

    The best one I've ever seen on this topic..Thanks.

  • @rituagrawal2218
    @rituagrawal2218 Před 2 lety

    Man you are awesome. You explain engineering concept so well.

  • @orzumirzayev6630
    @orzumirzayev6630 Před 2 lety +1

    Hello Husein. Thanks for video. I learned a lot from this. I really appreciate what you are sharing us.

  • @syedb8943
    @syedb8943 Před 2 lety +1

    Thanks Hussein for covering this topic !

  • @jupyter5k647
    @jupyter5k647 Před 2 lety +2

    Hussein if you work normally with node then I very highly recommend you to use another node package manager called "pnpm", it is far more efficient for managing depenedencies than just npm

    • @rocstar3000
      @rocstar3000 Před 2 lety +1

      I use yarn :)

    • @jupyter5k647
      @jupyter5k647 Před 2 lety +2

      @@rocstar3000 i've been using yarn since I started using nodejs for a long time and had been loving it, but after trying out pnpm I just switched as it has a really nifty way of managing your packages that I found is much better than yarn :^)
      Give it a go and see what you think about it ;^]

  • @thiagoalmeida5437
    @thiagoalmeida5437 Před 2 lety +4

    Could we just not use ~ or ˆ in the package.json to lock the version?

    • @Abdullah-yq7jp
      @Abdullah-yq7jp Před 2 lety +1

      Yes - but any vulnerability found, patched will remain in your code that can be exploited!!

    • @THEVIERAOS
      @THEVIERAOS Před 2 lety

      @@Abdullah-yq7jp
      While true, it’s not a bad choice to lock your packages down to a version. Especially if consistency and application up time are a key priority. It adds the overhead of having to monitor for exploits one way or another but it also keeps potential breaking changes out of your code base.
      It all depends on the package and how big of an impact it has on your application of course.

  • @AzedineOuhadou
    @AzedineOuhadou Před 9 měsíci

    great explanation Nasser.

  • @martinmohammed4087
    @martinmohammed4087 Před 2 lety

    This video is different. But positive with much of humour. Thanks

  • @redaawwad3544
    @redaawwad3544 Před 2 lety

    Thank you Hussein, happy Ramadan bro. 🌹🌹

  • @justaguyt
    @justaguyt Před 2 lety

    Thanks very much, 😭😭 these are the kind of explanation that help in building CI CD pipelines
    And for sure JavaScript project pipelines are hard to maintain

  • @uttammali1337
    @uttammali1337 Před 2 lety

    you can use "npm shrinkwrap'' it'll help you to lockdown the versions of installed packages and their descendant packaages.

  • @jeremiahblessing3891
    @jeremiahblessing3891 Před 2 lety

    Some where I read npm ci is for clean install, LOL!. Finally understood what that npm ci does. Gonna change my gitlab pipelines.

  • @yassdev
    @yassdev Před rokem

    I think the CI in npm ci stands for "Current Install"

  • @kapahimself
    @kapahimself Před 2 lety

    PLEASE START A DISCORD SERVER CAUSE YOUR CONTENT IS ABSOLUTE GOLD.

  • @ivan07z583
    @ivan07z583 Před 2 lety

    Hahahaha the Will Smith part was so funny and unexpected

  • @pim8268
    @pim8268 Před 2 lety

    Great content! And also a touch of sense of humor. We need to add a little fun to our learning process.

  • @mehmetedex
    @mehmetedex Před 2 lety

    "will smith" reference caught me off guard

  • @JLarky
    @JLarky Před 2 lety

    6:30 this is cute. You are forgetting that even if they don't release a new version of express you can still get tons of updates, because express dependencies could have released new versions :)

  • @ManojKumar-eg2sp
    @ManojKumar-eg2sp Před 2 lety

    We also have npm-shrinkwrap.json , when we run npm ci and if our project doesn't have package-lock.json, npm CI considers shrinkwrap.json

  • @paulsalele3844
    @paulsalele3844 Před 2 lety

    great explanations

  • @ambianceTree
    @ambianceTree Před 8 měsíci

    👍 Good simplification

  • @leonbenjamin7891
    @leonbenjamin7891 Před 2 lety

    Finally got it...thanks :)

  • @ramshankarkumar4222
    @ramshankarkumar4222 Před 2 lety

    Awesome explanation!!! Thank you so much for providing this knowledge.

  • @harishkanna6079
    @harishkanna6079 Před 8 měsíci

    So should we always use npm ci all the time instead of npm install just to be safe??

  • @prakharvijay8853
    @prakharvijay8853 Před 2 lety

    great explanation, I had always wondered the utility of package-lock.json, now I know it

  • @filipesommer8253
    @filipesommer8253 Před 2 lety

    Omg I lost it at the will smith reference lmao

  • @tonynguyen4007
    @tonynguyen4007 Před 2 lety

    Great explanation video as always Hussein. Love your video.
    But I fell weird with the example of why we need to use `npm ci`
    If the author of project need to stick to specific version, they would not add `~` -> anyone pull and install the project would not need to run `npm ci` they can just use `npm install` as usual
    Btw. `npm install` already gives preference `package-lock.json`.
    But yarn gives preference `package.json`

  • @shubhamnandeshwar999
    @shubhamnandeshwar999 Před 2 lety

    Amazing video! npm ci is actually clean install, it has nothing to do with CI/CD!

  • @bartoszsroka4705
    @bartoszsroka4705 Před 2 lety +1

    Why introducing a concept of package-lock.json? I need exact version? I can remove tilda. Why overcomplicating things?

  • @coreyfelipe5679
    @coreyfelipe5679 Před 2 lety

    Haha 😆. Have you considered doing podcast. You are funny and yet so knowledgeable to the topic.

  • @coderinprocess2678
    @coderinprocess2678 Před 8 měsíci

    Hey @hnasr, how to decide whether to use carrot or tilda ?

  • @thorfinnthegoatmc
    @thorfinnthegoatmc Před 2 lety

    damn Im using npm for years now I didnt know `npm ci` existed until now. this is very helpful

  • @ddanielsandberg
    @ddanielsandberg Před 2 lety

    NPM CI is "Clean Install".
    I never understood the obsession with version-ranges in the node-community.
    And then having to invent a lock-file when the penny dropped.

    • @babsNumber2
      @babsNumber2 Před 2 lety

      It's about giving options to developers. A person could decide to ignore the lock file while always upgrade or other teams could use the lock file more for reproducible deployments.

  • @hemanthsubbiah6826
    @hemanthsubbiah6826 Před 2 lety

    Straight to my gitlab CI/CD codebase and updating all npm install commands to npm ci

  • @adusparx
    @adusparx Před 2 lety

    The will smith troll was hilarious 😂😂

  • @lokeshpatel3914
    @lokeshpatel3914 Před 2 lety

    Great explanation. Please make a very detailed playlist of nodejs 🙏

  • @andyk2181
    @andyk2181 Před 2 lety

    The docs for `npm update` explain how the semver in package.json is used. `npm install` will use package-lock.json if it's there *and compatible with `package.json`*, `npm ci` needs the lock file and will remove node_modules if that exists.

  • @azeynar
    @azeynar Před 2 lety

    Great explanation, thank you !!!

  • @MK-ef9iu
    @MK-ef9iu Před 2 lety

    Very clear. Big up to Will smith

  • @HarshKapadia
    @HarshKapadia Před 2 lety

    Good video. Thank you Hussein!

  • @justine_chang39
    @justine_chang39 Před 2 lety

    awesome video man!

  • @williampogany6038
    @williampogany6038 Před rokem

    great video and your english is good! :)

  • @harshilparmar9076
    @harshilparmar9076 Před 2 lety

    This is gold 🥇

  • @astrix8812
    @astrix8812 Před 2 lety

    Loved it!

  • @hakimbencella4242
    @hakimbencella4242 Před 2 lety

    Why should i depends on package_lock if i can fix (without adding ^ and ~ ) my version in package.json ? 🤔

  • @unemployedcse3514
    @unemployedcse3514 Před 8 měsíci

    Awesome ❤

  • @hellowill
    @hellowill Před 2 lety

    Always use npm ci on the build pipeline!

  • @parthokr
    @parthokr Před 2 lety

    It would be nice if adding "$" restricts only patch updates.

  • @thedude5639
    @thedude5639 Před 2 lety

    I feel like he went full scottish for the 'caret'

  • @ca7986
    @ca7986 Před 2 lety

    This is amazing

  • @arekxv
    @arekxv Před 2 lety

    Using npm ci is the best for deployments but bad for development. Running ci can take a LONG time depending on how many packages you have, exactly because it is removing and renstalling all node_modules. We need an inbetween command which just does a diff and installs just what it needs to. Composer install honors this, why cant npm?

  • @andrejvujic
    @andrejvujic Před 2 lety

    What MacBook are you using?

  • @darthnihiluz5305
    @darthnihiluz5305 Před 2 lety

    This seems like a nightmare for enterprises. Do they physically host their own approved repositories?

    • @hnasr
      @hnasr  Před 2 lety

      Yes most enterprises I suppose would have a controlled npm registry. Otherwise its a mess.

  • @user-xu9zx9fd7n
    @user-xu9zx9fd7n Před 2 lety

    pnpm alternative for npm

  • @rohitbhatt7749
    @rohitbhatt7749 Před 2 lety +1

    vim is giving me anxiety.

  • @zorsen117
    @zorsen117 Před 2 lety

    So why should I use npm ci instead of just locking the specific version directly on my package.json? That's what confuses me ☹️

    • @hnasr
      @hnasr  Před 2 lety +1

      Because unfortunately while you can control your own packages by fixing the version, you can’t control all the dependency tree packages that downstream packages reference. One of those packages are marked as ^ or ~.

    • @zorsen117
      @zorsen117 Před 2 lety

      @@hnasr that makes a lot of sense. Thanks!!! Love your videos

  • @bashardlaleh2110
    @bashardlaleh2110 Před 2 lety

    I actually had a problem a month ago where I created a gitlab auto deployment pipeline job that pulls the pushed code and runs npm install on the server and it always failed because npm install was changing the lock file on the server which was considered a change in the local git repo so the git pull fails "you have uncommited changes please stash them or commit" then I found out about npm ci and the job succeeded

    • @hnasr
      @hnasr  Před 2 lety

      Wow interesting! I bet it was nasty to find

  • @balajibobby8530
    @balajibobby8530 Před 2 lety

    Upvote

  • @Faruk-zt5iw
    @Faruk-zt5iw Před 2 lety

    lmao at Will Smith part

  • @0xmg
    @0xmg Před 2 lety

    npm ci means clean install tho right ?

  • @Cosines
    @Cosines Před 2 lety

    good to see you using vim :)

  • @RohanDas23
    @RohanDas23 Před 2 lety

    so a quick question.. if you want "4.16.1" exact, then why can't you remove the ~ or ^ and it will solve the problem, no need to use package-lock.json. Am I missing something?

    • @PhilipLon7
      @PhilipLon7 Před 2 lety

      You might want to update the packages according to the range specified in the package.json
      but you don't want to do the update by accident or on a CI / build server.
      You then update the packages intentionally locally and check in the updated lock file.

    • @RohanDas23
      @RohanDas23 Před 2 lety

      @@PhilipLon7 if i am not confident that update won't break my app, then why would I take the risk of updating more than 1 package at a time? And if I am updating only 1 package, then i can do it manually.

  • @ericmackrodt9441
    @ericmackrodt9441 Před 2 lety

    Node package management is a huge mess...

  • @monstardev7189
    @monstardev7189 Před 2 lety

    the ''carrot''

  • @ademmohammed3939
    @ademmohammed3939 Před 2 lety

    ci=clean-install

  • @ozgur34
    @ozgur34 Před 2 lety

    Hussein Smith

  • @shivaganga9148
    @shivaganga9148 Před 2 lety

    Awesome

  • @Chaaos2
    @Chaaos2 Před 2 lety

    Love it 😂

  • @mikeaza
    @mikeaza Před 2 lety

    green

  • @Miguel-Barcelo
    @Miguel-Barcelo Před 2 lety

    $ npm ci
    Great job dude! thanks for sharing

  • @ca7986
    @ca7986 Před 2 lety

    ❤️

  • @elotanth9538
    @elotanth9538 Před 2 lety

    🔥🔥🔥

  • @BlackAsLight448
    @BlackAsLight448 Před 2 lety

    While I definitely learnt some new things in this video, I found that you repeated yourself a lot which made the video unnecessary longer than it needed to be.