Deno:你的新JavaScript包管理器来啦!
(最初发布于(deno.com/blog))
使用Deno 2,我们引入了几个子命令来简化依赖管理:deno add
,deno remove
和 deno install
。这些命令对于Node用户来说会感觉很熟悉,并且提供了更大的灵活性,使你可以轻松地导入npm和JSR包——甚至在Node项目中也可以。
本文将介绍如何使用Deno的工具集管理包,无论你是与npm、JSR还是带有package.json
的项目一起工作。我们还将看看其性能在与其他包管理器之间的比较。
[deno add](https://deno.com/blog/your-new-js-package-manager#new-subcommands)
,remove
,install
, 和uninstall
- 与Node和npm的集成
- 性能方面的见解
- 即将推出的新功能
新子命令🚨️🚨️Deno 2 来了 🚨️🚨️
支持与 Node/npm 的向下兼容性,内置的包管理功能,一体化零配置开发工具链, 以及原生 TypeScript 支持 和_Web API_, 编写 JavaScript 从未如此简单 🎉
deno add
在Deno中使用deno add
命令可以添加依赖项。
你可以通过 [deno add](https://docs.deno.com/runtime/reference/cli/add/)
命令,例如在 deno.json
或 package.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.json
和 package.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.json
或 package.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 update
和 deno 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 教程系列,你将学到:
更多短小精悍的视频,简而言之。每周二和周四发布新的教学视频。
共同学习,写下你的评论
评论加载中...
作者其他优质文章