Bookshelf.js/Knex.js 上数据库模式加载的常见做法

Common practice for database schema load on Bookshelf.js/Knex.js

ActiveRecord(来自 Rails)和 Sequelize(另一个 node.js ORM)都提供了一种初始化数据库的方法,从模型定义中创建 table 结构。 Rails 通过 rails db:schema:load 命令执行此操作,而 Sequelize 具有执行相同操作的 sync() 方法。通过使用它,我们不需要 运行 应用程序的整个迁移堆栈来启动一个新的数据库,也不需要在项目存储库中保存 SQL 转储。

基于这个背景,我期待 Bookshelf.js 或 Knex.js 具有某种类似的功能,但我在两个项目的文档中找不到它。

然后我决定看一下使用 Bookshelf 的 Ghost blogging engine 的源代码,我发现他们在自己的代码库中处理数据库初始化:

我想避免必须编写自己的代码来专门处理此类事情,因为像 Sequelize 这样的其他选项提供了开箱即用的功能。

在 Bookshelf 上加载数据库模式时,是否有任何推荐的做法、插件或库?

我认为您走在正确的轨道上,也许只是错过了文档。

http://knexjs.org/#Migrations

为了加载架构,如果迁移被编写为幂等,则可以 运行 迁移堆栈。

另一种选择是使用数据库的导出和导入功能。例如:https://www.postgresql.org/docs/9.1/static/app-pgdump.html

Rails 通过两个 rake 任务 db:schema:dump 和 db:schema:load 实现迁移。转储会将您的数据库架构转储到自定义 ruby 格式的本地 schema.rb 文件。 db:schema:load 加载该文件。

因此,您可以使用 pg_dump 和 pg_restore 以及 npm 包脚本实现类似的功能。只需让脚本使用节点的 exec 方法调用 pg_dump 并每次转储到同一个文件。