为了账号安全,请及时绑定邮箱和手机立即绑定

Deno:你的新JavaScript包管理器来啦!

(最初发布于(deno.com/blog))

使用Deno 2,我们引入了几个子命令来简化依赖管理:deno adddeno removedeno install。这些命令对于Node用户来说会感觉很熟悉,并且提供了更大的灵活性,使你可以轻松地导入npm和JSR包——甚至在Node项目中也可以。

本文将介绍如何使用Deno的工具集管理包,无论你是与npm、JSR还是带有package.json的项目一起工作。我们还将看看其性能在与其他包管理器之间的比较。

🚨️🚨️Deno 2 来了 🚨️🚨️

支持与 Node/npm 的向下兼容性,内置的包管理功能,一体化零配置开发工具链, 以及原生 TypeScript 支持 和_Web API_, 编写 JavaScript 从未如此简单 🎉

新子命令
deno add

在Deno中使用deno add命令可以添加依赖项。

你可以通过 [deno add](https://docs.deno.com/runtime/reference/cli/add/) 命令,例如在 deno.jsonpackage.json 文件中添加依赖项:

    deno add jsr:@std/path npm:chalk

这是一个Deno命令,用于添加标准路径库和chalk库。

如果没有找到配置文件,Deno 会自动生成一个带有导入映射的 deno.json 文件:

{
  "imports": {  
    "@std/path": "jsr:@std/path@^1.0.8",  
    "chalk": "npm:chalk@^5.3.0"  
  }  
}

在带有 package.json 的项目中,npm 模块会被添加到 package.json 文件中。上述命令会将 "chalk": "^5.3.0" 添加到 package.json 文件中。因此,而 deno.json 文件则存放 JSR 模块,以确保一致性和流畅性。

deno 移除

[deno remove](https://docs.deno.com/runtime/reference/cli/remove/)deno.jsonpackage.json 文件中移除依赖项。deno uninstall 是这个命令的别名。下面是一个例子:,

    deno remove jsr:@std/path npm:chalk

使用 deno 命令移除 jsr:@std/path 和 npm:chalk 包。

如果你想删除全局安装的二进制工具,你可以使用 --global 命令

    deno remove --global file-server  
    # ➜ 移除了这个全局文件服务器 /Users/deno/.deno/bin/file-server
deno install 命令用于安装Deno

就像 npm install 一样,deno install 会安装在 deno.jsonpackage.json 中列出的所有依赖项。如果有 package.json,npm 依赖项将安装在 node_modules 中。否则,Deno 会将它们安装到全局缓存中。

运行 Deno 的安装命令

提示:Deno 使用硬链接(类似于 pnpm)来优化空间和速度。有关基准测试,请参阅性能部分的内容

缓存依赖

对于包含 jsr:npm:http: 和/或 https: 依赖项的项目,你可以通过使用 --entrypoint 标志位提前缓存这些依赖项:

使用 `deno install --entrypoint main.ts` 安装程序,其中 `main.ts` 是主入口文件。

这在生产环境部署中特别有用,比如在构建Docker容器时,可以减少冷启动时间。

安装后 脚本

与 npm 不同,Deno 不自动运行 postinstall 脚本。在 npm 中,这些脚本可以执行来自第三方包的不可信代码——这带来了重大安全风险,允许任意代码完全访问您的系统。Deno 的方法通过要求您显式允许脚本来避免这一问题,更安全。

为了允许特定包运行 postinstall 脚本,请使用 --allow-scripts 选项。

    deno install --allow-scripts=npm:sqlite3

运行此命令来安装Deno并允许npm sqlite3脚本

此命令允许 npm:sqlite3 运行其 postinstall 脚本,同时阻止其他脚本的运行。这种设置让你更好地控制哪些脚本可以执行,从而保护你的系统免受潜在的有害或不可信代码的威胁。

了解 Deno 如何通过其权限申请系统实现默认安全设置

使用 Node 和 npm 进行包的管理

因为 Deno 支持 package.json,这些子命令在 Node 项目中的表现和你预期的一样,例如:

    /tmp# deno -A npm:create-vite  
    ✔ 项目名称: … vite-project  
    ✔ 选定一个框架: › Vanilla  
    ✔ 选择一个版本: › TypeScript  

    正在搭建项目到 /private/tmp/vite-project...  
    完成。接下来请运行:  
      cd vite-project  
      deno install  
      deno run dev  
    /tmp# cd vite-project/  
    /tmp/vite-project# deno install

这种兼容性意味着你可以使用 Deno 与多种 JavaScript 框架配合,比如 Node 和 npm。了解更多关于使用 Vite 构建 React 应用程序使用 [create-next-app](https://docs.deno.com/runtime/tutorials/how_to_with_npm/next/) 构建 Next.js 应用程序使用 Deno 构建 Astro 应用程序,以及其他框架和库的教程。

性能

Deno 使用一个全局缓存,就像 pnpm 一样,通过硬链接来提高速度并减少跨项目的存储使用。在 Linux 上,硬链接指向磁盘上原始文件的同一位置;在 macOS 上,clonefile 也是如此。这样就避免了冗余的副本,同时可以出现在多个位置。这意味着,如果依赖项 foo 占用了 1MB 的空间,它会同时出现在 node_modules 和全局存储中,但实际存储空间仅为 1MB。这种设计不仅最小化了磁盘使用,还加快了安装速度,尤其是在多仓库或具有共享依赖项的项目中更为明显。

下面来看看有缓存和无缓存模式下的安装速度对比:

更多详情请参阅此GitHub repo

接下来会怎样?

这些新命令使在Deno和Node项目中管理依赖项变得更加高效、熟悉和灵活。即将在下次发布中带来更多功能,包括 deno updatedeno outdated

    $ deno outdated  
    ---------------------------------------------  
    包名       | 已安装版本 | 建议更新到 | 最新稳定版本  
    ---------------------------------------------  
    jsr:@std/http | ^1.0.0 | 1.0.7 | 1.0.7   
    npm:react | 17.0.2 | 17.0.2 | 18.3.1  
    npm:vite | 4.5.5 | 4.5.5 | 5.4.8
$ deno outdated react  
检查 react 是否有更新  
---------------------------------------------  
包名        | 当前 | 更新到 | 最新  
---------------------------------------------   
npm:react    | 17.0.2 | 17.0.2 | 18.3.1

🚨 想了解更多关于 Deno 的信息吗? 🚨

查看我们的学习 Deno 教程系列,你将学到:

更多短小精悍的视频,简而言之。每周二和周四发布新的教学视频。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消