我可以在 strapi 运行时之外获取配置吗?

Can I get configs outside strapi runtime?

我正在 api 上实施 knex 迁移,我计划 运行 在 Heroku 发布阶段(在新版本开始之前)实施它们。

有什么方法可以从我的 knexfile.js 中获取 Strapi 的已解析配置?

像这样的东西会很棒:

const strapi = require('strapi');
strapi.config.database;

问题是我不想复制我的配置,要求 config/environments/xxx/database.json 不会给我 "parsed" 结果。意思是 "${process.env.DATABASE_HOST}" 还不会被插值。

最简单的解决方法是使用 process.env 而不是 strapi.config。 Strapi 配置只不过是派生常量,因此编写您自己的脚本不会带来启动 strapi 的开销。我假设您正在使用 heroku 环境变量。如果变量在发布阶段不可用(例如 Google App Engine gcp-build),您需要使用 dotenvyenv 或我构建的东西自己加载这些变量: kenv(基于对象的环境加载)。

我在使用 strapi 的 bootstrap 函数时遇到了类似的问题 - 我需要执行自己的迁移(在 strapi 土地之外),所以我最终编写了自己的 knex/bookshelf 种子以及在启动 strapi 之前手动执行的迁移脚本(不是通过预发布挂钩)。

另外,如果您想直接在 strapi 中构建迁移脚本,strapi hooks 也可能有用。

TLDR;

您可以通过以下方式获取 Strapi 的配置:

const strapi = require('strapi')({ serveAdminPanel: false });

strapi.load()
  .then(() => {
    const config = strapi.config.currentEnvironment;
  });

但是你可以通过这种方式直接获取Strapi的knex实例:

const strapi = require('strapi')({ serveAdminPanel: false });

strapi.load()
  .then(() => {
    const knex = strapi.connections[
      strapi.config.currentEnvironment.database.defaultConnection
    ];

    // do anything with knex here
    // like knex.migrate.latest();
  });

--

我尝试先获取配置,但当我这样做时,我一直收到连接错误,所以我设法直接获取 knex 连接,一切开始工作!