You don't need Node to use NPM packages

Поділитися
Вставка
  • Опубліковано 16 січ 2023
  • 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/v1.28
    Fireship CLI Tutorial • I created a Command Li...

КОМЕНТАРІ • 260

  • @Joso997
    @Joso997 Рік тому +17

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

  • @Codethier
    @Codethier Рік тому +246

    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

    • @jitx2797
      @jitx2797 Рік тому +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 Рік тому +22

      @@jitx2797 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.

  • @masterklm7216
    @masterklm7216 Рік тому +2

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

  • @softwarelivre2389
    @softwarelivre2389 Рік тому +7

    Deno is awesome! I use it whenever I can

  • @morkvitnir
    @morkvitnir Рік тому +4

    Thanks for the awesome content!

  • @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.

  • @rovolution8248
    @rovolution8248 Рік тому +3

    Yay Deno, thanks for the video :)

  • @codewithguillaume
    @codewithguillaume Рік тому

    Dino is taking so much space 🎉

  • @flamewave000
    @flamewave000 Рік тому

    Never heard of Deno, I might need to check it out.

  • @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 11 місяців тому +1

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

  • @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

  • @jesseparrish1993
    @jesseparrish1993 Рік тому

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

  • @mjkodonk
    @mjkodonk Рік тому +1

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

  • @IAmOxidised7525
    @IAmOxidised7525 Рік тому +15

    Now I am convinced JS is cursed

  • @htt344
    @htt344 Рік тому +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

  • @Dominik-K
    @Dominik-K Рік тому

    Now this is pretty cool

  • @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.

  • @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

  • @vladimirmijatovic4171
    @vladimirmijatovic4171 Рік тому

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

  • @vikingthedude
    @vikingthedude Рік тому +44

    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

  • @mateusvitorino
    @mateusvitorino Рік тому

    Nice

  • @richardrapstine9014
    @richardrapstine9014 Рік тому +5

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

  • @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:
      ua-cam.com/video/M3BM9TB-8yA/v-deo.html

  • @javiasilis
    @javiasilis Рік тому

    Nice!

  • @user-qx3qd8bi7c
    @user-qx3qd8bi7c 11 місяців тому +1

    Could you do a rust+deno vs. zig+bun detailed comparison and evaluation? Thanks.

  • @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!

  • @manemobiili
    @manemobiili Рік тому

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

  • @darrenmoriarty6984
    @darrenmoriarty6984 Рік тому +2

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

  • @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...

  • @quintencabo
    @quintencabo Рік тому

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

  • @ayowtf_m8
    @ayowtf_m8 Рік тому

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

  • @manni.Net60
    @manni.Net60 Рік тому

    i like node

  • @MailsonWei
    @MailsonWei Рік тому

    nice

  • @pwntmatch
    @pwntmatch Рік тому

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

  • @ludologian
    @ludologian Рік тому

    Please talk about fuseopen and fuse programming language, thanks

  • @stevenjje
    @stevenjje Рік тому

    more deno content!!

  • @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

  • @HappyCheeryChap
    @HappyCheeryChap Рік тому

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

  • @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

  • @glader88
    @glader88 Рік тому

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

  • @bennzeppelin
    @bennzeppelin Рік тому

    nice nice port

  • @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?

  • @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

  • @simonwtong
    @simonwtong Рік тому

    The thumbnail is a crack up

  • @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?

  • @SirXtC
    @SirXtC Рік тому +6

    so much extra work for such little gain lol

    • @heroe1486
      @heroe1486 10 місяців тому

      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 ?

  • @EduardoOviedoBlanco
    @EduardoOviedoBlanco Рік тому

    Almost there

  • @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.)

  • @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?

  • @GordonChil
    @GordonChil Рік тому +5

    Wow. I’m gonna start using deno for my backend scripts that perform actions on the DB. Hopefully it has postgresql support.

  • @AvinashSewpersadh
    @AvinashSewpersadh Рік тому

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

  • @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 9 місяців тому

      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

  • @maverick456-33
    @maverick456-33 Рік тому

    Rust + Deno !

  • @kashnigahbaruda
    @kashnigahbaruda Рік тому

    Am I supposed to rebuild everything with deno now?

  • @crushfire2004
    @crushfire2004 Рік тому

    Does npm import support for import map?

  • @adambickford8720
    @adambickford8720 Рік тому

    Does deno have any meaningful support in the cloud?

  • @leonhma
    @leonhma Рік тому +1

    But what about lockfiles?

  • @user-lj9tw3sw1t
    @user-lj9tw3sw1t Рік тому +1

    Upd: Second
    First🎉🎉🎉

  • @MieciuAutokarski
    @MieciuAutokarski Рік тому

    It is better of pnpm?

  • @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.

    • @lydianlights
      @lydianlights Рік тому +1

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

    • @heroe1486
      @heroe1486 10 місяців тому

      ​​​@@lydianlights 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.

  • @Manish___Choudhary
    @Manish___Choudhary Рік тому +1

    Make a deno crash course pls

  • @kanniappann2910
    @kanniappann2910 Рік тому

    How to deploy sveltekit project to firebase and host

  • @abplayzz
    @abplayzz Рік тому

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

  • @ErezAmihud
    @ErezAmihud Рік тому

    I wonder what the difference between bun and deno

  • @AbhinavKulshreshtha
    @AbhinavKulshreshtha Рік тому

    All I need is to figure out a central way to update all packages used in deno without need to go to every file. Package json might be overused, but it still serves as a central location to manage app dependencies.

  • @lonewolfcoding5208
    @lonewolfcoding5208 Рік тому

    what about elixir programming language?

  • @jordixboy
    @jordixboy 10 місяців тому

    How and where do you authenticate against private npm repo?

  • @re.liable
    @re.liable Рік тому

    can it like, cache the packages locally at least? My internet access is unreliable, so I don't know if this always-online approach is for me

    • @javierflores09
      @javierflores09 Рік тому +1

      it is cached locally, otherwise it wouldn't be called a cache. It is just not cached within the project root but rather to a global directory somewhere in your PC. That being said, you can get a node-like node_modules by executing the commands with --node-modules-dir

  • @joshking9537
    @joshking9537 Рік тому

    seems like a lot of excess work for what? minor speed boost. do you even get huge perf benefits with their backwards compatbility?

    • @VCR47527
      @VCR47527 Рік тому +1

      bun is a sizable speed boost. deno is similar if not slightly slower than node. I dont think performance improvement is part of deno's mission

  • @nikolaywaysman6576
    @nikolaywaysman6576 Рік тому

    can i use it on lambda?

  • @devcomptrickshots4136
    @devcomptrickshots4136 Рік тому +1

    Would honestly be using deno a lot more if they had backwards compatibility planned as bun does... Having to port a project to a new runtime altogether is painful, and a lot of packages do not really support deno well.

  • @malipetek
    @malipetek Рік тому

    How about size of executables? Is it any small?

    • @vin5718
      @vin5718 Рік тому

      Deno still uses V8 so it won’t be small since V8 will be included

    • @malipetek
      @malipetek Рік тому

      @@vin5718 There is not much point to it then, we have nexe in nodejs which is kinda same.

  • @v1ntee
    @v1ntee Рік тому +3

    Bro use port 6969, He is one of mines

  • @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...

  • @noy1009
    @noy1009 Рік тому

    what about bun?

  • @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.

  • @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)

  • @__sassan__
    @__sassan__ Рік тому

    Where are the packages installed then?

  • @MCasterAnd
    @MCasterAnd Рік тому

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

  • @forrestmorrisey
    @forrestmorrisey Рік тому

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

  • @henriquealmeida348
    @henriquealmeida348 Рік тому +3

    Seems to be npm with extra steps

  • @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 10 місяців тому

      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.

  • @mustafasertkaya4622
    @mustafasertkaya4622 Рік тому +1

    My experience with deno is really bad. I wanted to use it with firebase admin package. Even though I tried to setup it under the guidance of people from the discord server, i couldn't manage to set it up. They also couldn't help about this. So i ended up with netlify functions which is pretty easy if you compare with deno.

  • @AveN7ers
    @AveN7ers Рік тому

    port 6969 huehuehue Elon Musk is that you?

  • @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.

  • @lawrencedoliveiro9104
    @lawrencedoliveiro9104 Рік тому

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

  • @sarunmrzn
    @sarunmrzn Рік тому

    "no package.json" file bruh, how do you even keep track of dependencies thats installed

    • @clamhammer2463
      @clamhammer2463 Рік тому

      each package has a package.json that defines deps.

  • @GwenaelOo
    @GwenaelOo Рік тому

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

  • @mr.norris3840
    @mr.norris3840 Рік тому +2

    Just use golang

  • @gabrieltomaz56
    @gabrieltomaz56 Рік тому

    Every day a new more blazing fast some fucking javascript shit

  • @_purple_44_
    @_purple_44_ Рік тому

    Certain packages dont work tho

  • @domdirector
    @domdirector Рік тому

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

  • @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.

  • @kale.online
    @kale.online Рік тому

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

  • @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 💀

  • @elgalas
    @elgalas Рік тому

    Smells like cop-out, am I right?

  • @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 🙂

  • @alext5497
    @alext5497 Рік тому

    I came

  • @weshuiz1325
    @weshuiz1325 Рік тому

    i DeNo i think i might rather wait a little longer