【发布时间】: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