Skip to content

the concept of project

· xieyuheng

动机 ​

带有模块的 x-lisp 文件, 编译出来的 basic-lisp 文件, 需要保持路径的树状结构, 才能用到 basic-lisp 的模块和 bundle 功能。

这个需求类似 typescript 编译 javascript 时,需要保持路径的结构。

为了在 x-lisp 源代码文件旁边生成大量的中间文件, 我就需要专门的 build 路径,来保存中间文件。

也就是说,有了模块系统之后, 编译的对象不再是单独的文件, 而是多个模块所组成的项目。

这就需要引入「项目」的概念。

meta-package.json ​

以项目为对象完成编译。

用 meta-package.json 配置文件作为项目标识。

json
{
  "name": "my-project",
  "version": "0.1.0",
  "build": {
    "output-directory": "build",
    "source-directory": "."
  }
}

扩展 ​

保持可扩展:

  • 之后要能描述项目所依赖的外部文件。
  • 之后还可能要支持包管理。

testing entries ​

现有的测试约定是:

  • .test.lisp
  • .snapshot.lisp
  • .error.lisp

这些 test 都是不只需要编译, 还需要运行的代码。

所以也会被处理为 bundler 的 entry, 并且编译出二进制文件。

bin entries ​

可以让所有的 entry 都按照管理,而不用配置。 需要被编译成 bin 的就用 <name>.bin.lisp, 这些编译好之后会保存在 build/bin/<name> 下。

行动 ​

下面要实现 x-lisp 的模块系统。 然后解析 meta-package.json,并且实现 project 的概念。

注意:

  • compile 一类的命令可以不依赖 meta-package.json 就运行。
  • build 和 test 一类的命令,需要依赖 meta-package.json 才能运行。

因此,依然使用不依赖 meta-package.json 的 url 作为 module 的 id。