You don't need Node to use NPM packages

Поделиться
HTML-код
  • Опубликовано: 30 сен 2024
  • Learn how to use Node.js packages in the Deno JavaScript runtime with its new NPM specifier.
    #typescript #nodejs #javascript
    Deno NPM support blog post deno.com/blog/...
    Fireship CLI Tutorial • I created a Command Li...

Комментарии • 235

  • @Codethier
    @Codethier Год назад +247

    and the start of deno becoming the same kind of mess as node begins, with native and npm packages mingling together

    • @advanceringnewholder
      @advanceringnewholder Год назад +27

      I think nodejs is kinda inevitable at this point. Try running away, and it circle back to it.

    • @jack171380
      @jack171380 Год назад +74

      And so a new js runtime shall be born to right all wrongs, again

    • @jitxhere
      @jitxhere Год назад +17

      There's no way to fix this JS mess.
      I sometimes gets the childish thought why not design a language with pros of JS and remove the cons.

    • @animatrix1851
      @animatrix1851 Год назад +23

      @@jitxhere like people haven't done that already

    • @jakob7116
      @jakob7116 Год назад +3

      Eh, while all the compat stuff is available for the npm modules, they’re not available in your code, aka you’ll never have to use module.exports/require and such.

  • @Joso997
    @Joso997 Год назад +20

    Deno: "I have become the very thing I swore to destroy"

    • @pookiepats
      @pookiepats 25 дней назад

      @@Joso997 no! Not even close!! Ignorant!!!!

  • @hamm8934
    @hamm8934 Год назад +2

    Just stop using JavaScript in the backend omg. Learn another language like Go. This is a waste of time.

  • @IAmOxidised7525
    @IAmOxidised7525 Год назад +15

    Now I am convinced JS is cursed

  • @htt34400
    @htt34400 Год назад +132

    I like to use Vite because it supports scss files right in the head of html. But Vite loses support for scss files when using Deno.

    • @charlesm.2604
      @charlesm.2604 Год назад +8

      babel has a standalone package that does runtime transpilation, meaning you can write JSX/TS/SCSS and the transpilation step will happen after DOM load, directly in the browser.

    • @1000percent1000
      @1000percent1000 Год назад +28

      @@charlesm.2604 great even more overhead for the end user, i get what your point is but that is not a drop in replacement for Vite in most situations

    • @paradiseexpress3639
      @paradiseexpress3639 Год назад +12

      @@charlesm.2604 sounds horrible

    • @charlesm.2604
      @charlesm.2604 Год назад +1

      @@1000percent1000 I know but the original commenter does not want to introduce a JavaScript runtime environment with proper bundlers and transpilers so it's always an option.

    • @charlesm.2604
      @charlesm.2604 Год назад +1

      @@paradiseexpress3639 It is what it is

  • @chriskleeblatt1867
    @chriskleeblatt1867 Год назад +19

    You can actually compile deno to a self contained executable with "deno compile".
    But that feature is unstable and I think that npm support will soon be coming to that feature

    • @mollthecoder
      @mollthecoder Год назад +3

      They said that in the video

    • @pieterrossouw8596
      @pieterrossouw8596 Год назад +1

      It produces a huge binary, but sure it's there if you want it.

  • @richardrapstine9014
    @richardrapstine9014 Год назад +5

    Based on the trend of the comments, you probably should have covered import maps in this video.

  • @RedStone576
    @RedStone576 Год назад +67

    deno is becoming that one thing it swore to destroy

    • @fltfathin
      @fltfathin Год назад +2

      Pretty sure npm wasn't part of nodejs in the beginning hence the awful choices on packaging.

    • @codeman99-dev
      @codeman99-dev Год назад +5

      @@fltfathin Ryan literally announced deno by apologizing for strange packaging patterns.
      Let's review.
      He said that Isaac created package.json, but he (Ryan) designed `require` around it. Making it mandatory.
      He said that he regretted how node_modules is resolved.
      Then finally, the point that "index.js" became the default entrypoint.

    • @codeman99-dev
      @codeman99-dev Год назад +22

      I think Ryan was dead wrong about being upset about node_modules being local and vendored-by-default. It's a very good pattern. I can't stand using pip because I need extra tools to isolate my dependencies.
      Tell me the last time you used python with more than two dependencies that you didn't reach for a virtual environment.

    • @javierflores09
      @javierflores09 Год назад +4

      @@codeman99-dev when working with JVM languages, gradle does this too by containing the cached deps in the .gradle folder, honestly don't see what is so wrong about node_modules, the package.json is definitely something that could use some work though

    • @Bourn77
      @Bourn77 Год назад +10

      I think C# dotnet has the best package system(nuget) along with Rust cargo. It's a pleasure to work with

  • @ramtinabadi
    @ramtinabadi Год назад +7

    So, here is a problem. If you are using a NPM package in 20 different files, you need to change the version number every time in all of the files?

    • @ashishbhushan7837
      @ashishbhushan7837 Год назад +7

      No just export all your dependencies in a deps.ts file and then use it in any of your project files
      That's how a standard deno project looks like, ofc they don't use import in every file with a URL that long
      Just make a central deps file exporting all the dependcies

    • @opjoter
      @opjoter Год назад +5

      @@ashishbhushan7837 So it's basically asking you to create your own package.json

    • @ashishbhushan7837
      @ashishbhushan7837 Год назад +1

      Nope just a typescript/javascript file with some
      `export {foo} from "bar"`
      statements that's it👍

    • @MCasterAnd
      @MCasterAnd Год назад +3

      @@ashishbhushan7837yeah but that is literally package.json though, just a diff syntax

    • @ashishbhushan7837
      @ashishbhushan7837 Год назад +1

      Only it's not mandatory and you need a way in any language to maintain all your packages. Don't we?

  • @ra2enjoyer708
    @ra2enjoyer708 Год назад +25

    1:04
    Is this a good thing? Where do you store (serializible) project metadata in deno codebases? While `package.json` can become an unwieldy dumping ground for unrelated keys, it also provides a place to store serializible data which would be all over the codebase otherwise.
    How does deno scope local and global packages without `node_modules`?

    • @jimmehjimmson8876
      @jimmehjimmson8876 Год назад +2

      You're comment actually made me think quite a bit. Some really good questions you're asking here.
      After digging around a bit, I think the answer is yes, it's a good thing that package.json is gone. And no, I don't think you can install modules globally/locally for deno, since that's not how deno works. I also can't think of a scenario where globally/locally installed modules are more sensible than deno's default sandboxing with setting explicit permissions when required, but am happy to change my mind, if you have one :).
      I could probably not explain it better than Ryan Dahl does himself in the talk he gave on why Deno came to exist in the first place:
      ruclips.net/video/M3BM9TB-8yA/видео.html

  • @SirXtC
    @SirXtC Год назад +6

    so much extra work for such little gain lol

    • @heroe1486
      @heroe1486 Год назад

      Could say the same about creating a backend with node, being with express or even Nest, no gains with tons of extra work.
      And where do you see the extra work from this video ?

  • @masterklm7216
    @masterklm7216 Год назад +3

    As soon as I saw you import Express without even installing it I knew it was over❤

  • @TechdubberStudios
    @TechdubberStudios Год назад +1

    don't care. If I'm ever migrating away from node, it will be on BunJS.

  • @vincaslt
    @vincaslt Год назад +16

    I wonder what's the best way to manage package versions in deno. If you use the package more than once and wish to change its version, you have to change it across the whole app. I've seen some ideas with declaring a single file that imports a versioned package and reexports it for the app. I've also seen some native way to keep track of versions in importMap, though I've had trouble providing types for packages that don't ship with them. Any idea?

    • @RouvenKruse
      @RouvenKruse Год назад +4

      I would suggest import maps

    • @richardrapstine9014
      @richardrapstine9014 Год назад +3

      It’s literally in the Deno docs. Import maps.

    • @vincaslt
      @vincaslt Год назад

      @@richardrapstine9014 any idea about the packages with missing types?

    • @vintprox
      @vintprox Год назад +1

      @@vincaslt That's fair point... As long as I observe, there is no import map aliasing for @deno-types comments, which is a shame.

    • @vincaslt
      @vincaslt Год назад

      @@vintprox what was also bothering me a bit is that one of the selling points of deno (even mentioned in this video) is that it doesn't need a package.json file.
      In my eyes, importMap is pretty much the same package.json file...

  • @vikingthedude
    @vikingthedude Год назад +43

    I don’t like seeing npm written in the source code. I would’ve liked to have a config file that would point to the npm registry url instead. Sort of what gradle does. Maybe could’ve leveraged import maps for that.

    • @thecrazyiwan
      @thecrazyiwan Год назад +27

      You can already do that in import maps in Deno!

    • @richardrapstine9014
      @richardrapstine9014 Год назад +11

      Import maps are already a thing in Deno. They even have a handy little tutorial on them.

    • @vikingthedude
      @vikingthedude Год назад +1

      If we can already import packages from any registry using import maps, then why have they added the “npm:” import to deno? Seems redundant unless there’s some npm-specific reason for not using import maps. Why should deno make an exception for npm?

    • @mollthecoder
      @mollthecoder Год назад

      @@vikingthedude because npm is so popular

  • @johnyepthomi892
    @johnyepthomi892 Год назад +4

    I learned Javascript and I’m thankful to js. Now, I can finally learn a low level language. I used it as a tool to learn to code and That’s where I want to draw the line.

  • @scottspitlerII
    @scottspitlerII Год назад +4

    Wouldn’t you have to specify the version like everywhere? Or can you just have a “consts” faux package.json file that imports the types?

    • @kamadoori
      @kamadoori Год назад +2

      Seems like the way to go to me. Although the desire to call it "package.ts" is a little bit strong... at that point you kind of lose the "advantage" of not having a package.json

    • @tabiasgeehuman
      @tabiasgeehuman Год назад +1

      You can either use a deps.ts file or an import map. Deno also has a deno.lock file

  • @softwarelivre2389
    @softwarelivre2389 Год назад +7

    Deno is awesome! I use it whenever I can

  • @aasutossh
    @aasutossh Год назад +7

    1:38 the server is running on port 6969, and the browser is connected to port 4000? magic!!

    • @YuriG03042
      @YuriG03042 Год назад +1

      It's using reverse proxy by default, it's actually magic! Except the ports are always randomized...

  • @codewithguillaume
    @codewithguillaume Год назад

    Dino is taking so much space 🎉

  • @v1ntee
    @v1ntee Год назад +3

    Bro use port 6969, He is one of mines

  • @Manish___Choudhary
    @Manish___Choudhary Год назад +1

    Make a deno crash course pls

  • @NilsMoller
    @NilsMoller Год назад +1

    Great and all that you can specify package using links inline but the reason we have a package-lock.json. What happens when I want reproducable builds?

  • @manasnagelia
    @manasnagelia Год назад +1

    Next video: Deno vs Bun

  • @AwesomeTingle
    @AwesomeTingle Год назад +14

    the convenience of node makes it incredibly difficult for me to ever consider switching. this is a 3min video to show us how to accomplish the equivalent of "npm install x"

    • @ShadoFXPerino
      @ShadoFXPerino Год назад +1

      0:58 achieves the install and import in a single line. In node you have to npm install and then go into your file to import.

    • @lunafoxfire
      @lunafoxfire Год назад +1

      @@ShadoFXPerino wow. amazing. revolutionary. incredible.
      also totally pointless.

    • @heroe1486
      @heroe1486 Год назад

      ​​​@@lunafoxfire Just like the guy above you clearly missed the point of the video, it's not about the fact that you don't need to install but about the fact that deno is now compatible with npm packages.
      Your smartness is indeed incredible.

  • @darrenmoriarty6984
    @darrenmoriarty6984 Год назад +2

    What would happen if you use multiple versions of the same lib in your app?

  • @henriquealmeida348
    @henriquealmeida348 Год назад +3

    Seems to be npm with extra steps

  • @rovolution8248
    @rovolution8248 Год назад +3

    Yay Deno, thanks for the video :)

  • @mr.norris3840
    @mr.norris3840 Год назад +2

    Just use golang

    • @JoelTsafackTsafcko
      @JoelTsafackTsafcko 3 месяца назад

      Yeah it looks like a big loop... Unless I don't really understand this..

  • @thefynn
    @thefynn Год назад +9

    I hope Deno will be popular soon, its just much better. The natural Problem of a huge echosystem world is that inovations is very slow

  • @gabrieltomaz56
    @gabrieltomaz56 Год назад

    Every day a new more blazing fast some fucking javascript shit

  • @HuntingtonSean-q4r
    @HuntingtonSean-q4r 22 дня назад

    Robinson James Young Charles Johnson Cynthia

  • @h.hristov
    @h.hristov Год назад +1

    And you have to update the import in each file if you ever decide to update to the newer version. No thanks

    • @clamhammer2463
      @clamhammer2463 Год назад

      23 seconds of work?! gross!

    • @h.hristov
      @h.hristov Год назад +1

      @@clamhammer2463 yeahh cba ctrl+f replace all 💀

  • @morkvitnir
    @morkvitnir Год назад +4

    Thanks for the awesome content!

  • @adambickford8720
    @adambickford8720 Год назад

    Not a fan of 'load bearing' comments. We did this in java for years and it SUCKED so much they created annotations for metadata.

  • @volimsir
    @volimsir Год назад +1

    Really cool progress, but I'm still gonna wait before switching.
    Got burned switching build tools way too much in the past.

  • @GwenaelOo
    @GwenaelOo Год назад

    Deno looks great, but am I the only one to find package.json helpful?

  • @humanfriend22
    @humanfriend22 Год назад +16

    This is great to hear but I don't think I'll be switching anytime soon because it doesn't really have the community & ecosystem Node has. At least not yet.

    • @softwarelivre2389
      @softwarelivre2389 Год назад +8

      I already switched, as soon as Deno 1.0 launched, and I'm definitely NOT coming back to insecure node. The security model in Deno is just that important.

    • @justpatrick_
      @justpatrick_ Год назад +1

      And deno deploy is absolutely magnificent

  • @manemobiili
    @manemobiili Год назад

    If i was at a gunpoint and had to choose a javascript backend probably deno would be it!

  • @adambickford8720
    @adambickford8720 Год назад

    Does deno have any meaningful support in the cloud?

  • @kale.online
    @kale.online Год назад

    Comments as code? We've come full circle with 00's Java

  • @whhitryjekugitihg
    @whhitryjekugitihg Год назад

    im gay for javascript but the comments will hide it

  • @jordixboy
    @jordixboy Год назад

    How and where do you authenticate against private npm repo?

  • @glader88
    @glader88 Год назад

    "no Juan understands me" --Señor Developer

  • @poulticegeist
    @poulticegeist Год назад +1

    Thanks for that caveat. Relay, only the de rigeur graphql library, happens to be one of those non-esm libraries that don't work with freshjs

  • @Salah-YT
    @Salah-YT Год назад +2

    it is nice but I think we have to wait until they make it better, I'm a beginner anyway thx 🙂

  • @abplayzz
    @abplayzz Год назад

    "Port of your choice". I like your choice, though. 😂

  • @elgalas
    @elgalas Год назад

    Smells like cop-out, am I right?

  • @lonewolfcoding5208
    @lonewolfcoding5208 Год назад

    what about elixir programming language?

  • @leonhma
    @leonhma Год назад +1

    But what about lockfiles?

  • @mjkodonk
    @mjkodonk Год назад +1

    I use it on my main project for some features. it works well. :D

  • @domdirector
    @domdirector Год назад

    golang been doing this for a bunch of years now, nerds

  • @joseburgosguntin
    @joseburgosguntin Год назад +6

    Firebase zooming in on "Enable Deno linting?", and just selecting "no" is kinda funny 0:49

    • @crowlkats
      @crowlkats Год назад

      linting doesnt have to do with formatting.

    • @joseburgosguntin
      @joseburgosguntin Год назад

      @@crowlkats whoops you’re right, but If I’m not mistaken the formatting that deno does come with a default of 2 spaces (and I just found that a bit cursed)

  • @AveN7ers
    @AveN7ers Год назад

    port 6969 huehuehue Elon Musk is that you?

  • @codyrap95
    @codyrap95 Год назад

    Deno "supporting" npm is like SteamOS "supporting" Windows games: it... kinda works ... Sometimes ... If you tweak them ... And you are lucky

    • @heroe1486
      @heroe1486 Год назад

      Proton works really nicely, and it's not steamOS but just Linux, given some limitations like non compatible anti cheats etc, you're obviously exaggerating.
      And If you're a Dev and can't follow 3 instructions on proton DB then that's problematic, it's easier than your basic 3 liners "get started" for any npm package.

  • @lawrencedoliveiro9104
    @lawrencedoliveiro9104 Год назад

    Don’t need Node? No Node nerd need? Need Node? No!? ∗Nods∗

  • @weshuiz1325
    @weshuiz1325 Год назад

    i DeNo i think i might rather wait a little longer

  • @JustSomeAussie1
    @JustSomeAussie1 Год назад

    I really hate the way this guy says "vs code"

  • @_purple_44_
    @_purple_44_ Год назад

    Certain packages dont work tho

  • @talhaibnemahmud
    @talhaibnemahmud Год назад +3

    Time to switch my side projects to deno ❤️

    • @fayenotfaye
      @fayenotfaye Год назад +11

      The sequel to framework hell, runtime hell.

    • @ra2enjoyer708
      @ra2enjoyer708 Год назад +1

      @@fayenotfaye Can even combine for classic `m * n` problem!

  • @ErezAmihud
    @ErezAmihud Год назад

    I wonder what the difference between bun and deno

  • @НейроАстральнаяСова

    Upd: Second
    First🎉🎉🎉

  • @__sassan__
    @__sassan__ Год назад

    Where are the packages installed then?

  • @harmez7
    @harmez7 Год назад

    imma use my own language instead

  • @C0ntroller
    @C0ntroller Год назад

    Way does every new JS engine have to do everything different? I don't like how there are so many packaging schemas that aren't interoperable. And I don't talk about the packages itself or their availability (although imo npm support _should_ always be included).
    If all of these engines do the same thing in the end (running my stupidly bad JS) why can't make my project for one engine and then run it with another. Currently, you have to have Deno installed to run a project written for Deno. You have to have bun installed to run a project written for bun.
    In Java, every SDK/JDK will take every project; in Python, PyPy will at least try to run your code (and probably succeeds if it's a simple script).
    I don't think the package.json is a bad thing and Deno and bun should at least have a fallback to support it. Else, they will probably never be used more than Node. IMO, having a file describing third-party dependencies for a project using them is an absolute must-have. pom.xml exist, requirements.txt exist and even for some C/C++ projects a README exists, telling you which libs to install first.
    BTW: Could you maybe do a video about Node, bun and Deno? Like for which use case which engine to choose, how good is the speedup in "real" applications (not benchmarks) and how and if it's possible to "convert" projects for another engine.

  • @ddktst
    @ddktst Год назад

    The problem with deno npm support that it does not work properly as expected. You will struggle and suffer. The only application for deno is microservice, with low level abstractions. Do not ever think about wring a monolith with

    • @heroe1486
      @heroe1486 Год назад

      I mean same for node, if you want a monolith you use Rails, Django, Laravel, Phoenix, Spring or whatever, which are battle tested fully featured framework that don't require you to import tons of (sometimes half backed) dependencies to build your backend.
      The closest popular option Node has to that is Nest I guess, which is nowhere close to the ones quoted above

  • @FlorianMaeder
    @FlorianMaeder Год назад

    So. If I use Lodash functions in multiple files in my project I either have to omit the version and hope the latest doesn't break stuff or set the version in every import and then update each and every import if I want to upgrade Lodash? (You can replace Lodash with any other 3rd-party library if you don't like Lodash.)

  • @AvinashSewpersadh
    @AvinashSewpersadh Год назад

    So Deno + Google Cloud Run or Lambdas works better or worse than node?, given the caching of the libraries.

  • @forrestmorrisey
    @forrestmorrisey Год назад

    I've kept an eye on Deno for my team but until we have Angular and Cypress support we are are SOL

  • @pauljohnsonbringbackdislik1469

    I doubt it solves peer-dependencies problem and I am already tired of reverting package updates because of TS compilation errors.
    I'll give it a pass unless someone can prove Deno can handle a large Nuxt app and monorepo.

  • @Badisnotfunny
    @Badisnotfunny Год назад

    become a chad and use bun

  • @nikolaywaysman6576
    @nikolaywaysman6576 Год назад

    can i use it on lambda?

  • @MieciuAutokarski
    @MieciuAutokarski Год назад

    It is better of pnpm?

  • @justingiovanetti
    @justingiovanetti Год назад

    Cool. Now we can keep our projects in the cloud without worrying about syncing thousands of unused modules. … less I’m misunderstanding this here.

  • @jihadkhorfan
    @jihadkhorfan Год назад

    so.... deno or bun

  • @lsp9123
    @lsp9123 Год назад

    My Name is Juan😭

  • @cas818028
    @cas818028 Год назад

    You lost me at deno….

  • @keokawasaki7833
    @keokawasaki7833 Год назад +30

    Deno also has a built in test runner and a testing framework that is pretty good straight out of the box.
    It also has the linter built into it and the lsp server too.
    I'm loving this a heck ton over node js which I never touched because it was ugly from the beginning imo
    Deno's imports however are trash because obviously it's hard to see what's being imported from a single place. Yes import maps are there but there's no enforcement to only allow imports from the map. It is very well possible to import things outside of the import map

    • @heygema
      @heygema Год назад +1

      thanks, same impression with imports, bit confusing at first

    • @jackdavenport5011
      @jackdavenport5011 Год назад

      Yeah I like deno's imports but I don't like the idea of having to copy and paste the exact same import everywhere in my code, especially with version limits

  • @rudrecciah
    @rudrecciah Год назад +4

    It's definitely interesting but considering there's no place to define installed packaged besides imports themselves I'd imagine auto-imports wouldn't be possible...nor can I get over thr syntax of the type directive 🤮

    • @crowlkats
      @crowlkats Год назад +4

      you can use an import map to define your dependencies.

  • @HappyCheeryChap
    @HappyCheeryChap Год назад

    Does Deno let you set permission per-NPM-package yet? Or do the permission still apply to your entire program?

  • @rafaelacioly3252
    @rafaelacioly3252 Год назад

    Probably there's a way to fix it, but we'll need to specify the package version on every file that we import the dependence?

  • @catriverr
    @catriverr Год назад

    All of this crap just to run the same program exactly the same way.

  • @ludologian
    @ludologian Год назад

    Please talk about fuseopen and fuse programming language, thanks

  • @kashnigahbaruda
    @kashnigahbaruda Год назад

    Am I supposed to rebuild everything with deno now?

  • @pwntmatch
    @pwntmatch Год назад

    every fireship video starts with the tools the new package offers . every fireship video ends with a diss on JS

  • @noy1009
    @noy1009 Год назад

    what about bun?

  • @nomadshiba
    @nomadshiba Год назад

    tbh npm packages are usually also have git repos, people can just use the github repos and etc

  • @kanniappann2910
    @kanniappann2910 Год назад

    How to deploy sveltekit project to firebase and host

  • @2u841r
    @2u841r 3 месяца назад

    Very good

  • @EduardoOviedoBlanco
    @EduardoOviedoBlanco Год назад

    Almost there

  • @TheCyberBully420
    @TheCyberBully420 Год назад

    Bun vs deno

  • @nishantraval2740
    @nishantraval2740 Год назад +2

    Typescript support and no config files are very good features, but not supporting NPM is deno's biggest mistake.
    NPM and nodejs has huge ecosystem, and no one will going to write that much code again for deno. Deno will add overhead for developer to check whether specific npm package is working correctly or not.
    People now uses typescript without fear, because they are ensured that their code will also run in older browsers supporting only ES5. Deno must have to find a way to support NPM to replace node. Otherwise, majority of developers wil fear to switch.

  • @MCasterAnd
    @MCasterAnd Год назад

    Fucking hell, this is how Node should have handled it all along

  • @jesseparrish1993
    @jesseparrish1993 Год назад

    Great! I'll hang around a few more years and see if it's worth transitioning to Deno for any production use.

  • @vladimirmijatovic4171
    @vladimirmijatovic4171 Год назад

    I was just about to ask if Deno is still alive. I got my answer :D

  • @ayowtf_m8
    @ayowtf_m8 Год назад

    I recently installed rustc and cargo and it's a c++ killer

  • @quintencabo
    @quintencabo Год назад

    Having a package json is kinda nice though to see what something is using

  • @bad-at-art-games
    @bad-at-art-games Год назад

    i like node

  • @Hohmlec
    @Hohmlec Год назад

    69 noooice

  • @david_eom
    @david_eom Год назад

    port 6969