前言
Deno 是一个新兴的 JavaScript 运行时环境,由 Node.js 的创始人 Ryan Dahl 开发。它以 V8 引擎为核心,用 Rust 语言编写,提供了 Node.js 所不具备的诸多新特性。在 Deno 中,可以使用 ES2015+ 语法,支持 TypeScript,并实现了基于权限的安全控制等等。
然而,Deno 在其发布的扩展、第三方库的管理上相对 Node.js 来说略显不足。因此,在开发和打包 Deno 应用时,我们需要一定的技巧和经验。本文将介绍几种常见的打包和发布技巧,希望能对读者有所帮助。
打包技巧
使用 Deno 自带的依赖工具
Deno 内置了一个依赖管理工具:deno-info。通过使用 deno-info 命令,可以将当前项目所用到的依赖项及其版本信息打印出来。比如:
$ deno info index.ts # 输出: ... compile: /deno-deps/https/raw.githubusercontent.com/username/repo/latest/mod.ts ...
除了依赖信息,它还可以详细地列出模块、变量、函数、类等代码结构的信息。这在开发过程中非常有用,在发布时则不必列出所有信息。
使用 Esbuild 进行打包
Esbuild 是一个极其快速的 JavaScript 打包器。它通过使用 Go 语言编写,对比常见的 JavaScript 打包器,内置的优化效果更好,速度也更快。它支持 CommonJS,ES modules,umd,JSON 等格式,可以将一系列零散的代码、第三方库打包为一个单独的文件,方便我们发布和管理。
在使用 Esbuild 之前,我们需要先通过 Deno 获取到需要打包的代码,并保存在本地:
// index.ts import foo from 'https://example.com/foo.ts'; console.log(foo);
我们可以使用 Deno 来获取 foo.ts 的源码并保存在本地:
$ deno cache https://example.com/foo.ts
然后,我们就能用 Esbuild 将多个文件打包成一个单文件:
$ esbuild index.ts --bundle --outfile=bundle.js
以上命令可以将 index.ts 和 foo.ts 打包成一个单文件 bundle.js。
代码压缩
对于 JavaScript 代码,我们通常都要对代码进行压缩,减小文件大小,提高加载速度。常见的压缩工具有 UglifyJS,Terser 等,这里以 Terser 为例:
$ esbuild index.ts --bundle --minify --outfile=bundle.js
以上命令将 index.ts 和 foo.ts 打包成一个单文件 bundle.js,并对其进行了压缩。
发布技巧
使用 Deno.land
Deno.land 是一个 Deno 生态系统的门户网站。在 Deno.land 上,我们可以找到很多使用 Deno 编写的第三方库和模块,使用这些库和模块可以大大提高我们的开发效率。
我们可以将自己编写的模块发布到 Deno.land 上,也可以通过搜索功能来找到需要的模块。发布模块需要遵守其规范,具体可参考官方文档,这里简单介绍一下。
编写模块
在编写模块时,我们需要遵循以下规则:
- 所有的模块名称必须是全局唯一的,且以一个 URL 作为前缀,例如:https://deno.land/x/xxx
- 模块名称应该短小精悍,不应包含多余的单词
- 一个库应该被设计为一个或多个组织方式,使得访问者容易理解如何使用和扩展它
同时,我们还可以在模块中使用 import-maps(即一个 JSON 文件),来指定外部依赖和版本号:
{ "imports": { "moment": "https://cdn.skypack.dev/moment" } }
这样,我们可以在代码中使用 import 语句引入第三方库,并且不需要担心在未来更新库时出现不兼容的问题。
发布模块
在编写完模块后,我们可以将其发布到 Deno.land 上,具体步骤如下:
- 将模块上传到 GitHub 中,以便可以在 Deno.land 网站上展示模块的元数据。
- 在 GitHub 中创建一个 release,并将代码打包成 zip 或 tarball 形式的文件。
- 在 Deno.land 上传 zip 或 tarball 文件,上传后便可以在 Deno.land 上找到该模块。
版本控制和更新
在发布后,我们还需要对模块进行版本控制和更新。对于使用 Git 进行版本控制的仓库,可以使用 git tags 来标记版本号。在发布新版本时,需要更新该仓库,并给新版本打上 git tag,然后在 Deno.land 中更新元数据。
结束语
本文介绍了 Deno 的打包和发布技巧,内容详细、有深度,并包含了示例代码,希望对读者有所帮助。Denoland 的生态系统还在不断壮大,相信在不久的将来,它会成为一个强大的、值得我们期待的开发平台。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67c7f210e46428fe9eda4ed5