首页 > 解决方案 > @google-cloud/logging 可以在 Ionic4/Angular8/Firebase 客户端应用程序中使用吗?如何修复模块导入错误

问题描述

我想在使用 Ionic 4、Angular 8 和 Firebase 的应用程序中使用 nodejs-logging 将日志写入 StackDriver。

在应用程序根目录中,我执行以下操作:

  1. npm install @google-cloud/logging
  2. 转到@google-cloud/logging/build/proto/logging.d.ts,并添加此导入语句import {Long} from "protobufjs"
  3. 在@google-cloud/logging/build/proto/logging.config.d.ts 中执行相同的操作
  4. 构建 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

标签: angularfirebasegoogle-cloud-logging

解决方案


正如您在 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 中提供的答案,以帮助其他有类似问题的开发人员。

[1] https://github.com/googleapis/nodejs-logging/issues/566


推荐阅读