【问题标题】:Using firebase-tools as a node module and for deploying only rules使用 firebase-tools 作为节点模块并仅部署规则
【发布时间】:2018-04-04 10:34:58
【问题描述】:

我正在尝试清理我的构建系统,我想使用firebase-tools (Firebase-hosted docs) 模块来执行此操作。在 CLI 中使用该包的文档已经足够好了,但将其用作节点模块的文档却很少(而且深入研究该包的源代码也并不简单)。

在撰写本文时,以下是相关文档(仅出现在 GH 存储库中):


作为模块使用

Firebase CLI 也可以通过编程方式用作标准节点模块。这只能在您的机器上完成,而不能在 Cloud Functions 中完成。每个命令都作为一个函数公开,该函数接受一个选项对象并返回一个 Promise。例如:

var client = require('firebase-tools');
client.list().then(function(data) {
  console.log(data);
}).catch(function(err) {
  // handle error
});

client.deploy({
  project: 'myfirebase',
  token: process.env.FIREBASE_TOKEN,
  cwd: '/path/to/project/folder'
}).then(function() {
  console.log('Rules have been deployed!')
}).catch(function(err) {
  // handle error
});

如您所见,仅包括两个非常基本的示例,并且没有描述可以为每个命令提供的各种选项。

例如,CLI 使用--only 标签(例如--only database,如果只想推送新规则)。如果我只想部署规则,是否在选项中包含only: "database"

示例中的输出确实吹嘘“规则已部署!”成功消息,但提供给deploy 的选项似乎没有表明这只会推送规则(而不是没有--only 选项的完整部署)!

额外问题:如果我的规则文件与我想要托管的文件有不同的路径怎么办?我只看到示例中提供了一个cwd 选项。

这里的一些更清晰的文档会有很长的路要走:)

【问题讨论】:

    标签: firebase firebase-tools


    【解决方案1】:

    一般准则:

    • 对函数访问使用点分符号(例如,database:get => client.database.get()
    • 将位置参数作为函数参数传递
    • 将选项对象中的全局和命令选项作为最后一个函数参数传递
    • 所有函数都返回一个承诺

    例子:

    firebase --project my-firebase-project database:get /user/setting --output /tmp/out.json
    

    变成:

    var util = require('util'),
      client = require('firebase-tools');
    
    client.database.get('/user/setting', {
      project: 'my-firebase-project', // global option
      output: '/tmp/out.json',        // global option
      shallow: true                   // database:get option
    }).then(
      x => console.log(util.inspect(x))
    ).catch(
      e => console.log(util.inspect(e))
    );
    

    【讨论】:

      【解决方案2】:

      如果是目标deploy,您可以使用选项键onlyexcept

      您可以指定一个逗号分隔的目标列表(例如“hosting,functions”),不接受数组。对于函数,可以使用冒号指定过滤器,以将函数部署到仅这些函数的范围(例如“functions:func1,functions:func2”)。

      Valid targets are

      • 托管:您的 Firebase 托管网站的新版本,
      • 数据库:Firebase 实时数据库规则,
      • firestore:Cloud Firestore 的规则和索引,
      • 函数:Firebase 的新的、更新的或现有的 Cloud Functions,
      • 存储:Firebase 的云存储规则。

      这是我在 gulpfile 中使用的:

      const fbTools = require('firebase-tools');
      function deployProdTask() {
        return fbTools.deploy({
          project: 'abc',
          only: 'functions',
          token: '123',
          force: true
        });
      }
      

      必须按照here 的描述生成令牌。

      【讨论】:

        猜你喜欢
        • 2022-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-29
        • 2015-11-08
        相关资源
        最近更新 更多