umajho / dicexp

Dicexp 是一种表示掷骰的表达式。本仓库代码用于对该表达式求值,并作为该表达式的事实标准。
https://umajho.github.io/dicexp/
MIT License
2 stars 0 forks source link

移除 `dicexp` 对 `@dicexp/builtins` 的依赖 #28

Closed umajho closed 1 year ago

umajho commented 1 year ago

更好的做法是让使用者分别引入这两个包,然后把后者中需要用的传给前者。 目前主要卡在 scope 会包含函数,而函数无法传给 worker。

目前的解决思路是:

  1. 建一个内部包(暂定为 @dicexp/builtins-internal),把 @dicexp/builtins 中 scope 的声明、定义、成品移过去。
  2. preval 每个 makeScope 调用,各放进单独的文件。(目前卡在这里,没找到 vite 下实现 preval 的方式)
  3. 配置上述各文件作为输入,经过 minify,输出 dist 版 module 文件。
  4. 配置 package.json 中的 exports 字段,使外部可以引入上述输出文件。
  5. @dicexp/builtins 中除了引入并重新引出 @dicexp/builtins-internal 中 scope 一般的声明、定义、成品之外,还通过 import ... from "...?raw" 的方式将上述输出文件作为字符串引入并引出。
  6. dicexp “evaluating” 部分中 “向 worker 传作用域名” 的行为改为 “向 worker 传作用域模块的源代码”。
  7. worker 通过动态引入 data URL 的方式得到所需的作用域模块。
  8. ???
  9. Profit
umajho commented 1 year ago

在 889b528e972b85aaa8fdb02e658663ebf84a81d9 中以另一种方式解决了: 由使用者自行在自己的库中创建用于求值的 worker。