Skip to content

BioforestChain/Util

Repository files navigation

Bnqkl-Util

typescript util packages

如何使用

如何在 nodejs 中使用

编译会分发出两个包: @bnqkl/util-node@bnqkl/util-web 。不会再有其它子包(也就是说所有的自包现在已经全部聚合成一个包)。

如果要兼容原本的用法: npm i @bfchain/util@npm:@bnqkl/util-node (npm install <alias>@npm:<name>)。或者在 pakcage.json/deps 中写: "@bfchain/util": "npm:@bnqkl/util@^1.0.0"

如何在 dnt 中使用

dnt 是一个将 Deno 转化成 Node 的工具。本项目也使用这个工具进行开发。 本项目之所以使用这个方案,是因为有多平台分发的需求,而 deno 的 importMap 可以很好的解决这个问题。 如果您的项目也有类似的需求,需要将一套代码分发到多个包中,那么可以使用本项目的解决方案:

  1. 配置 npm.json
  2. 编译 build_npm.ts
  3. 发布 pub_npm.ts

如果您也选择了这个方案,说明您的目标是编译到 nodejs 平台, 那么这里的建议是使用 https://esm.sh/ 来获取 npm 包,比如:

import { Inject } from "https://esm.sh/@bnqkl/util-node@1.0.0";

然后再通过 importMap 的配置来编译来将https://esm.sh/@bnqkl/util-node 修改成 https://esm.sh/@bnqkl/util-web 以分发到不同的包中。

如何在 deno 中使用

import { Inject } from "https://deno.land/x/bnqkl_util@1.0.0/mod.ts";

命名规范

  1. 代码中:$开头的为着“无副作用函数”,主要有两类:

    1. $+小写:为无副作用函数(需要在 jsdoc 中声明@inline
    2. $+大写:为 TypeScript 类型定义与推断
  2. 代码中:纯大写+下划线 通常为“零成本抽象”定义,目前只有一类:const enum

  3. 文件中:包含!意味着“宏”,会被编译期间动态替换掉的

    1. import/exportpath中如果是!开头,说明该路径会在importMap配置中被动态替换
    2. 文件名称:!+profile的会随着编译去替换到importMap中的目标文件,目前profile只有两种:node/browser
  4. 代码中:无副作用函数调用带有!声明的,会被编译器内联:

    // 无副作用函数
    const $add = (a, b, ...rest) => a + b;
    // 源代码
    const res = $add!(...args);
    // 编译结果
    let $someFun_return;
    {
      // decalre argument
      const [a, b, ..rest] = args
      // replace source code
      // if arrow function , add return keyword
      // then replace return keyword as `someFun_return = `
      $someFun_return = a + b;
    }
    // replacement function call
    const res = $someFun_return;