denza启动指导(如何使用Deno的内置工具)
Deno和 Node.js之间一个令人惊讶的区别是运行时内置的工具数量。除了 Read-Eval-Print Loop (REPL) 控制台,Node.js 需要第三方模块来处理大多数间接编码活动,例如测试和 linting。Deno 内置工具提供了开箱即用的几乎所有东西。
在我们开始之前,请注意。deno是新的!谨慎使用这些工具。有些可能不稳定。很少有配置选项。其他可能会产生不良副作用,例如递归处理每个子目录中的每个文件。最好从专用项目目录测试工具。
安装 Deno使用以下终端命令在 macOS 或 Linux 上安装 Deno:
curl -fsSL https://deno.land/x/install/install.sh | sh
或来自 Windows Powershell:
iwr https://deno.land/x/install/install.ps1 -useb | iex
Deno 手册中提供了更多安装选项。
回车deno --version检查安装是否成功。显示 V8 Javascript 引擎、TypeScript 编译器和 Deno 本身的版本号。
升级 Deno使用以下命令将 Deno 升级到最新版本:
deno upgrade
或升级到特定版本,例如 v1.3.0:
deno upgrade --version 1.30.0
以下大多数工具在所有版本中都可用,但更高版本可能具有更多功能和错误修复。
Deno 帮助可以通过输入以下命令查看工具和选项列表:
deno help
与 Node.js 一样,可以通过deno在终端中输入来访问 REPL 表达式评估控制台。您输入的每个表达式都会返回一个结果或undefined:
$ deno
Deno 1.3.0
exit using ctrl d or close()
> const w = 'World';
undefined
> w
World
> console.log(`Hello ${w}!`);
Hello World!
undefined
> close()
$
通过使用光标键浏览表达式历史,可以重新输入以前输入的表达式。
依赖检查器可以通过输入入口脚本的路径/URL 来deno info <module>查看所有模块依赖关系的树。<module>
考虑以下lib.js带有导出hello和sum函数的库代码:
// general library: lib.js
/**
* return "Hello <name>!" string
* @module lib
* @param {string} name
* @returns {string} Hello <name>!
*/
export function hello(name = 'Anonymous') {
return `Hello ${ name.trim() }!`;
};
/**
* Returns total of all arguments
* @module lib
* @param {...*} args
* @returns {*} total
*/
export function sum(...args) {
return [...args].reduce((a, b) => a b);
}
这些可以index.js在同一目录中的主入口脚本中使用:
// main entry script: index.js
// import lib.js modules
import { hello, sum } from './lib.js';
const
spr = sum('Site', 'Point', '.com', ' ', 'reader'),
add = sum(1, 2, 3);
// output
console.log( hello(spr) );
console.log( 'total:', add );
运行结果deno run ./index.js:
$ deno run ./index.js
Hello SitePoint.com reader!
total: 6
index.js可以通过以下方式检查使用的依赖项deno info ./index.js:
$ deno info ./index.js
local: /home/deno/testing/index.js
type: JavaScript
deps:
file:///home/deno/testing/index.js
└── file:///home/deno/testing/lib.js
类似地,可以检查任何模块 URL 所需的依赖项,但请注意该模块将在首次使用时被下载并在本地缓存。例如:
$ deno info https://deno.land/std/hash/mod.ts
Download https://deno.land/std/hash/mod.ts
Download https://deno.land/std@0.65.0/hash/mod.ts
Download https://deno.land/std@0.65.0/hash/_wasm/hash.ts
Download https://deno.land/std@0.65.0/hash/hasher.ts
Download https://deno.land/std@0.65.0/hash/_wasm/wasm.js
Download https://deno.land/std@0.65.0/encoding/hex.ts
Download https://deno.land/std@0.65.0/encoding/base64.ts
deps:
https://deno.land/std/hash/mod.ts
└─┬ https://deno.land/std@0.65.0/hash/_wasm/hash.ts
├─┬ https://deno.land/std@0.65.0/hash/_wasm/wasm.js
│ └── https://deno.land/std@0.65.0/encoding/base64.ts
├── https://deno.land/std@0.65.0/encoding/hex.ts
└── https://deno.land/std@0.65.0/encoding/base64.ts
有关更多信息,请参阅Deno 手册:依赖检查器。
Linter(语法检查器)Deno 提供了一个 linter 来验证 JavaScript 和 TypeScript 代码。这是一个需要--unstable标志的不稳定功能,但使用时不会更改任何文件。
Linting 有助于发现不太明显的语法错误并确保代码符合您团队的标准。你可能已经在编辑器或命令行中使用了诸如ESLint 之类的 linter,但 Deno 在安装它的任何环境中都提供了另一个选项。
要递归地检查当前目录和子目录中的所有.js文件.ts,请输入deno lint --unstable:
$ deno lint --unstable
(no-extra-semi) Unnecessary semicolon.
};
^
at /home/deno/testing/lib.js:13:1
Found 1 problem
或者,您可以指定一个或多个文件来限制 linting。例如:
$ deno lint --unstable ./index.js
$
有关更多信息,请参阅Deno 手册:Linter。它包括一个规则列表,您可以添加到代码注释中以忽略或强制执行特定语法。
测试赛跑者Deno 有一个内置的测试运行器,用于对 JavaScript 或 TypeScript 函数进行单元测试。
测试在任何以、、、或扩展名命名<something>test的文件中定义。它必须进行一次或多次调用并传递测试名称字符串和测试函数。该函数可以是同步的或异步的,并使用各种断言实用程序来评估结果。.js.mjs.ts.jsx.tsxDeno.test
使用名为的文件创建一个新test子目录lib.test.js:
// test lib.js library
// assertions
import { assertEquals } from 'https://deno.land/std/testing/asserts.ts';
// lib.js modules
import { hello, sum } from '../lib.js';
// hello function
Deno.test('lib/hello tests', () => {
assertEquals( hello('Someone'), 'Hello Someone!');
assertEquals( hello(), 'Hello Anonymous!' );
});
// sum integers
Deno.test('lib/sum integer tests', () => {
assertEquals( sum(1, 2, 3), 6 );
assertEquals( sum(1, 2, 3, 4, 5, 6), 21 );
});
// sum strings
Deno.test('lib/sum string tests', () => {
assertEquals( sum('a', 'b', 'c'), 'abc' );
assertEquals( sum('A', 'b', 'C'), 'AbC' );
});
// sum mixed values
Deno.test('lib/sum mixed tests', () => {
assertEquals( sum('a', 1, 2), 'a12' );
assertEquals( sum(1, 2, 'a'), '3a' );
assertEquals( sum('an', null, [], 'ed'), 'annulled' );
});
要从所有目录运行所有测试,请输入deno test. 或者运行存储在特定目录中的测试,使用deno test <dir>. 例如:
$ deno test ./test
running 4 tests
test lib/hello tests ... ok (4ms)
test lib/sum integer tests ... ok (2ms)
test lib/sum string tests ... ok (2ms)
test lib/sum mixed tests ... ok (2ms)
test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out (11ms)
$
还--filter可以指定字符串或正则表达式以按名称限制测试。例如:
$ deno test --filter "hello" ./test
running 1 tests
test lib/hello tests ... ok (4ms)
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 3 filtered out (5ms)
--failfast通过传递一个选项,可以在第一次失败时停止长时间运行的测试。
有关更多信息,请参阅Deno 手册:测试。一些第三方测试模块也可用,包括Merlin和Ruhm,但这些仍然Deno.test在表面下使用。
V8 调试器Deno 提供与 Node.js 相同的 V8 引擎和调试器。可以使用 Chrome 浏览器或VS Code附加到调试器,然后单步执行代码以查看变量和对象更改。
要启动调试器,请在第一行运行带有--inspect或--inspect-brk停止的脚本。如果您需要从网络上的其他设备连接到调试器,请添加其 IP 地址和端口,或者使用--inspect=0.0.0.0:9229. 例如:
$ deno run --inspect-brk=0.0.0.0:9229 ./index.js
Debugger listening on ws://0.0.0.0:9229/ws/ceb123...
Debugger session started.
打开在新的 Chrome 选项卡中,deno脚本将显示为新的远程目标:
注意:“dedicated DevTools for Node”不会连接到 Deno 的调试器,即使它们相似。
单击目标的检查链接以启动 DevTools。如果您使用过客户端调试,这将是熟悉的。Sources选项卡是最有用的,它允许您逐步执行代码:
代码格式化程序
内置的代码格式化程序以类似于Prettier的方式自动格式化 JavaScript 和 TypeScript 代码。Deno 的格式化程序也是固执己见的,目前无法配置选项。
要使用它,请输入deno fmt递归格式化每个子目录中的每个文件。例如:
$ deno fmt
/home/deno/testing/index.js
/home/deno/testing/test/lib.test.js
/home/deno/testing/lib.js
或者,您可以格式化一个或多个单独的文件,例如deno fmt ./index.js.
如果您检查该lib.test.js文件,您会看到格式化程序已删除一些间距并将字符串转换为使用双引号 ( "):
// hello function
Deno.test("lib/hello tests", () => {
assertEquals(hello("Someone"), "Hello Someone!");
assertEquals(hello(), "Hello Anonymous!");
});
// deno-fmt-ignore通过添加注释可以忽略单个代码块。例如:
// deno-fmt-ignore
const bin = [
1, 0, 0,
0, 1, 0,
0, 0, 1,
];
// deno-fmt-ignore-file通过在代码顶部添加注释可以忽略整个文件。
有关更多信息,请参阅Deno 手册:代码格式化程序。
警告!自动格式化会对 JSDoc 注释产生不利影响。
文档生成器Deno 可以从源代码中的JSDoc 注释生成文档,解释函数的用途、参数和返回值。目前,Deno 只会为具有哪些export功能的模块生成文档。例如:
$ deno doc ./lib.js
Defined in file:///home/deno/testing/lib.js:9:0
function hello(name)
return "Hello <name>!" string
@module lib
@param {string} name
@returns {string} Hello <name>!
Defined in file:///home/deno/testing/lib.js:21:0
function sum(...args)
Returns total of all arguments
@module lib
@param {...*} args
@returns {*} total
$
添加--json标志以 JSON 格式输出文档。
脚本捆绑您的主脚本及其所有依赖项可以使用以下方法捆绑到一个文件中:
deno bundle <main-script> <output-script>
例如:
$ deno bundle ./index.js ./index.bundle.js
Bundle file:///home/deno/testing/index.js
Emit "./index.bundle.js" (3.13 KB)
然后可以执行生成的脚本:
$ deno run ./index.bundle.js
Hello SitePoint.com reader!
total: 6
在将脚本分发给最终用户或将最终代码库部署到实时服务器时,这可能很有用。
注意:捆绑时顶级await调用可能会失败,因此async必须添加包装函数。这是一个已知问题,将在未来的 Deno 版本中修复。
有关更多信息,请参阅Deno 手册:捆绑。
脚本安装程序Deno 脚本可以全局安装,因此可以从文件系统中的任何位置运行。它类似于安装全局 Node.js 模块,但更简单易用。
deno install必须通过命令:
- 任何必需的运行时权限标志,例如--allow-read、--allow-write或--allow-net.
- 一个可选的已安装脚本名称,带有--name <scriptname>.
- 一个可选的安装根文件夹,带有--root <path>. 如果未设置,Deno 会将脚本安装到DENO_INSTALL_ROOT环境变量中设置的路径或$HOME/.deno/bin/.
- 模块路径或 URL。
上面的示例脚本可以安装:
$ deno install --name myscript ./index.js
✅ Successfully installed myscript
/home/deno/.deno/bin/myscript
myscript在目录中创建一个文件.deno/bin/,其内容如下:
#!/bin/sh
# generated by deno install
deno "run" "file:///home/deno/testing/index.js" "$@"
myscript现在可以从系统上的任何位置运行。例如:
cd ~
$ myscript
Hello SitePoint.com reader!
total: 6
这个过程可以很容易地告诉用户如何从已发布的 URL 安装您的应用程序。例如:
deno install --name myapp https://myserver.com/myapp.js
myapp
Deno 目前不提供uninstallorremove命令。删除脚本的唯一方法是从.deno/bin/目录或安装位置手动删除生成的文件。
有关更多信息,请参阅Deno 手册:脚本安装程序。
完整的 Deno 工具包?Deno 的工具是新的,有些是初级的,但是记录在案的“标准”方法有好处。Node.js 提供了许多第三方选项,但这可能导致选择瘫痪或持续的解决方案切换。您是否坚持使用相同的 Node.js 测试套件?
但是,请注意:随着 Deno 使用量的增长,这些内置工具可能会迅速发展。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com