您将在 changesets 源代码中的第 4 行找到导入内容
import { format } from "util";
本文概述了 util 模块及其在变更集中的用法。
实用模块
util模块主要是为了支持node.JS自己的内部api的需求而设计的。然而,许多实用程序对于应用程序和模块开发人员也很有用。可以使用以下方式访问:
const util = require('util');
您可以在此处阅读有关 util 模块的更多信息。
util 模块有相当多的 api,但我们对 format api 感兴趣,因为这是在 changesets 源代码中使用的。
util.format(format[, …args])
util.format() 方法使用第一个参数作为类似 printf 的格式返回格式化字符串。
第一个参数是包含零个或多个占位符标记的字符串。每个占位符标记都替换为相应参数的转换值。支持的占位符有:
-
%s — 字符串。
-
%d — 数字(整数或浮点值)。
-
%i — 整数。
-
%f — 浮点值。
-
%o — 对象。具有通用 JavaScript 对象格式的对象的字符串表示形式。类似于
util.inspect() 带有选项 { showhidden: true, depth: 4, showproxy: true }。这将显示完整的对象
包括不可枚举的符号和属性。
-
%o — 对象。具有通用 javascript 对象格式的对象的字符串表示形式。类似于 util.inspect()
没有选项。这将显示不包括不可枚举符号和属性的完整对象。
-
%% — 单个百分号 (‘%’)。这不会消耗参数。
如果占位符没有相应的参数,则不会替换占位符。
util.format('%s:%s', 'foo'); // returns: 'foo:%s'
如果传递给 util.format() 方法的参数多于占位符的数量,则多余的参数将被强制转换为字符串,然后连接到返回的字符串,每个字符串均以空格分隔。 typeof 为‘Object’或‘symbol’(NULL 除外)的过多参数将被 util.inspect() 转换。
util.format('%s:%s', 'foo', 'bar', 'baz'); // 'foo:bar baz'
如果第一个参数不是字符串,则 util.format() 返回一个由空格分隔的所有参数串联而成的字符串。使用 util.inspect() 将每个参数转换为字符串。
util.format(1, 2, 3); // '1 2 3'
如果仅将一个参数传递给 util.format(),则该参数将按原样返回,不带任何格式。
util.format('%% %s'); // '%% %s'
现在我们了解了 util 模块和格式 api 的基础知识,现在让我们看看 changesets 中的格式用法。
变更集中的 util.format 用法
搜索格式,我发现了 2 个使用格式的实例。
``` ${format("", err).replace(process.cwd(), "<cwd>")} ```
这只是输出错误,并且由于第一个参数是空字符串,因此不需要进行替换。
util .format("", …args) .split(" ") .join(" " + fullPrefix + " ")
这会产生一个由空格分隔的字符串,假设…args是逗号分隔的
关于我们:
在 thinkthroo,我们研究大型开源项目并提供架构指南。我们开发了使用 tailwind 构建的可重用组件,您可以在项目中使用它们。我们提供 next.js、react 和 node 开发服务。
与我们预约会面讨论您的项目。
参考资料:
-
https://www.npmjs.com/package/util
-
https://github.com/changesets/changesets/blob/main/packages/cli/src/index.ts#l4
-
https://github.com/changesets/changesets/blob/main/packages/cli/src/index.ts#l88
-
https://nodejs.org/docs/latest-v8.x/api/util.html#util_util_format_format_args
-
https://github.com/changesets/changesets/blob/main/packages/logger/src/index.ts#l23
-
https://github.com/changesets/changesets/blob/main/packages/get-github-info/src/index.test.ts#l127
-
https://github.com/changesets/changesets/blob/main/packages/cli/src/index.ts#l88