angular - @google-cloud/logging 可以在 Ionic4/Angular8/Firebase 客户端应用程序中使用吗?如何修复模块导入错误
问题描述
我想在使用 Ionic 4、Angular 8 和 Firebase 的应用程序中使用 nodejs-logging 将日志写入 StackDriver。
在应用程序根目录中,我执行以下操作:
- npm install @google-cloud/logging
- 转到@google-cloud/logging/build/proto/logging.d.ts,并添加此导入语句
import {Long} from "protobufjs"
: - 在@google-cloud/logging/build/proto/logging.config.d.ts 中执行相同的操作
- 构建 Ionic 应用程序
但是,我从许多不同的核心节点模块中获取了一个未找到模块错误的列表:crypto、child_process、fs、os、net、path、http、http2、stream、tls 和 zlib。
错误信息如下:
./node_modules/google-gax/build/src/operationsClientBrowser.js 中的错误 找不到模块:错误:无法解析 '/home/pam/strata1/strata_forms_app/node_modules/google-gax/build 中的 './operations_client_config' /src' ./node_modules/@google-cloud/common/node_modules/google-auth-library/build/src/auth/googleauth.js 中的错误模块未找到:错误:无法解析“/home”中的“child_process” /pam/strata1/strata_forms_app/node_modules/@google-cloud/common/node_modules/google-auth-library/build/src/auth' ./node_modules/@google-cloud/logging/node_modules/google-auth-library 中的错误/build/src/auth/googleauth.js 未找到模块:错误:无法解析“子进程”中的“/home/pam/strata1/strata_forms_app/node_modules/@google-cloud/logging/node_modules/google-auth-library/build/src/auth' ./node_modules/@google-cloud/common/node_modules/google-auth 中的错误-library/build/src/crypto/node/crypto.js 未找到模块:错误:无法解析 '/home/pam/strata1/strata_forms_app/node_modules/@google-cloud/logging/node_modules/google 中的 'crypto' -auth-library/build/src/crypto/node' ./node_modules/@opencensus/propagation-stackdriver/build/src/stackdriver-format.js 中的错误 找不到模块:错误:无法解析'中的'crypto' /home/pam/strata1/strata_forms_app/node_modules/@opencensus/propagation-stackdriver/build/src' ./node_modules/@opencensus/propagation-stackdriver/build/src/v1.js 中的错误/node_modules/@google-cloud/common/node_modules/google-auth-library/build/src/crypto/node/crypto.js 找不到模块:错误:无法解析“/home/pam/strata1”中的“加密” /strata_forms_app/node_modules/@google-cloud/logging/node_modules/google-auth-library/build/src/crypto/node' ./node_modules/@opencensus/propagation-stackdriver/build/src/stackdriver-format.js 中的错误找不到模块:错误:无法解析“/home/pam/strata1/strata_forms_app/node_modules/@opencensus/propagation-stackdriver/build/src”中的“crypto” ./node_modules/@opencensus/propagation-stackdriver/ 中的错误构建/src/v1.js/node_modules/@google-cloud/common/node_modules/google-auth-library/build/src/crypto/node/crypto.js 找不到模块:错误:无法解析“/home/pam/strata1”中的“加密” /strata_forms_app/node_modules/@google-cloud/logging/node_modules/google-auth-library/build/src/crypto/node' ./node_modules/@opencensus/propagation-stackdriver/build/src/stackdriver-format.js 中的错误找不到模块:错误:无法解析“/home/pam/strata1/strata_forms_app/node_modules/@opencensus/propagation-stackdriver/build/src”中的“crypto” ./node_modules/@opencensus/propagation-stackdriver/ 中的错误构建/src/v1.js/home/pam/strata1/strata_forms_app/node_modules/@google-cloud/logging/node_modules/google-auth-library/build/src/crypto/node' ./node_modules/@opencensus/propagation-stackdriver/build/src 中的错误/stackdriver-format.js Module not found: Error: Can't resolve 'crypto' in '/home/pam/strata1/strata_forms_app/node_modules/@opencensus/propagation-stackdriver/build/src' ./node_modules/@ 中的错误opencensus/propagation-stackdriver/build/src/v1.js/home/pam/strata1/strata_forms_app/node_modules/@google-cloud/logging/node_modules/google-auth-library/build/src/crypto/node' ./node_modules/@opencensus/propagation-stackdriver/build/src 中的错误/stackdriver-format.js Module not found: Error: Can't resolve 'crypto' in '/home/pam/strata1/strata_forms_app/node_modules/@opencensus/propagation-stackdriver/build/src' ./node_modules/@ 中的错误opencensus/propagation-stackdriver/build/src/v1.js
我是配置 webpack 的新手,但我尝试将 webpack.config.js 文件添加到@google-cloud/logging/build/src
并<ionic_app_root>./src
包含以下配置更改:
module.exports = {
//...
node: {
console: false,
global: true,
process: true,
__filename: 'mock',
__dirname: 'mock',
Buffer: true,
setImmediate: true,
child_process: 'empty',
crypto: 'empty',
fs: 'empty',
os: 'empty',
net: 'empty',
path: 'empty',
http: 'empty',
http2: 'empty',
stream: 'empty',
tls: 'empty',
zlib: 'empty',
}
};
鉴于这个库被描述为 StackDriver node.js 客户端库,我希望它可以在 Ionic4 + Angular8 + Firebase 应用程序中工作。
- Node.js version: 11.10.0
- npm version: 6.7.0
- `@google-cloud/logging` version: 5.2.2
- AngularCLI: 8.2.3
- typescript: 3.5.3
- webpack 4.39.2
解决方案
正如您在 GitHub [1] 中收到的回复中提到的:
“我们正在努力使这些库与 Webpack 一起使用成为可能,但这可能需要更多时间。原因是这个库使用 gRPC(通过 HTTP/2 发送协议缓冲区),它不能轻易地被 webpacked。虽然该工作正在进行中,您可以尝试使用我们不太复杂的库https://github.com/googleapis/google-api-nodejs-client/tree/master/src/apis/logging(通过 HTTP/1 发送纯 JSON因此是 webpackable)。或者,在服务器端处理您的日志记录调用。
Google Api 团队
我正在分享 Github 中提供的答案,以帮助其他有类似问题的开发人员。
推荐阅读
- kubernetes - rancher 的 rke 无法在新集群上启动
- r - 根据数字对行进行子集和折叠
- c# - DataSet 中所有 DataTables 中所有行的计数
- python - 错误:428 尝试使用 Python 结帐时
- flutter - 颤振移除底部填充容器
- pandas - AWS SageMaker 批量转换 CSV 错误:未引用字段中的“裸露”
- java - Java非常奇怪地处理大量数字
- r - 根据第 n 次出现的分隔符将一列分成两列
- python - 当 ANSI 转义序列字符在字符串中时,Python 字符串格式被忽略
- ruby-on-rails - 如何在我的 Rails 应用程序中执行操作之前确定延迟的原因?