【问题标题】:Cloud functions for Firebase /usr/bin/env: node not foundFirebase /usr/bin/env 的云功能:找不到节点
【发布时间】:2018-02-17 07:10:08
【问题描述】:

我的问题是:当我使用像 xml2json 这样的 npm 包时,如何使节点可用于 Firebase 的 Cloud 函数上的 shell 脚本?

上下文:

我正在将一个软件从短期 Docker 容器转移到 Firebase 的云功能。该软件处理大型 XML 文件并将部分转换为 JSON。

由于内存消耗,我通过shell使用xmllint和xml2json。

var cmd = './xmllint --xpath "//OrderData" ' + this.filename + ' | ' + __dirname + '/node_modules/xml2json/bin/xml2json';
exec(cmd, function(error, stdout, stderr) { ... }

Xmllint 按预期工作(分布在我添加到函数目录中 package.json 的 npm 包中)

"@niekoost/convertini": "file:niekoost-convertini-1.0.1.tgz"

但是通过 xml2json 的管道会产生问题: xml2json 的第一行导致了我的问题

#!/usr/bin/env node

这会导致 Firebase 控制台中的 Cloud Functions 日志出现错误

Error: Command failed: ./xmllint --xpath "//OrderData" 
/tmp/kdjf6kv9hku86xw4h392j4i.xml | /user_code/node_modules/xml2json/bin/xml2json
/usr/bin/env: node: No such file or directory

Firebase 的 Cloud 函数上的节点位于何处?我可以让它对 /usr/bin/env 可用吗?或者我应该分叉 xml2json npm 包并更改该代码。

【问题讨论】:

  • 除了文档中的内容(现在,只是 imagemagick)之外,不要假设任何东西都可以执行。更喜欢在函数运行时本身中完成所有工作。
  • 您好,Doug,感谢您的回复。由于 main 函数已经准备好使用 Node 二进制文件执行,我认为假设 Node 已安装并且 shell 脚本也可以访问该二进制文件是完全安全的。

标签: firebase google-cloud-functions


【解决方案1】:

经过一些额外的搜索,我找到了适合我情况的解决方案,而无需更改为 xml2json 提供的 npm 包。

由于 xml2json 用于由 'exec' 执行的命令,我们只需要使 Node 二进制文件的路径在该 exec 的环境中可用。该路径可以从 'process.execPath' 派生:

var exec    = require('child_process').exec;
var process = require('process');

// get path where the node binary is located from within the code that
// is being executed by the node runtime provided by Firebase
var nodePath = process.execPath;
nodePath = nodePath.split('/');
nodePath = nodePath.splice(0, nodePath.length-1).join('/');

// add path to the environment
process.env.PATH += ':' + nodePath;

var cmd = './xmllint --xpath "//OrderData" /xyz.xml | /user_code/node_modules/xml2json/bin/xml2json';

// call the command and provide the extended env
exec(cmd, {env: process.env}, function(error, stdout, stderr) {
  ...
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2018-01-03
    • 1970-01-01
    • 2018-06-25
    • 2021-05-07
    • 1970-01-01
    • 2015-07-28
    相关资源
    最近更新 更多