部署到 Google 云时如何防止 babel/cli 不可访问错误?

How to prevent babel/cli not accessible error when deploying to Google Cloud?

我有一个 Node.js Google 云函数,我现在尝试将其模块化为两个 js 模块。它在我的机器上本地运行良好,但在尝试部署到 Google 时出现以下错误:

ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Build failed: npm ERR! @babel/cli not accessible from data-model

我的 main-function 正在通过 package.json 中的以下条目使用我的 data-model 模块:

  "dependencies": {
    "@google-cloud/datastore": "^6.1.1",
    "data-model": "file:../../data-model",
    ...
  },

data-model 模块依次具有以下 package.json:

{
  "name": "data-model",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "$(gcloud beta emulators datastore env-unset) && export GOOGLE_APPLICATION_CREDENTIALS=\"${GCPPRODFILEPATH}\" &&  jest --verbose --forceExit",
    "build": "npx babel src --out-dir dist"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@google-cloud/datastore": "^6.6.2",
    "@google-cloud/storage": "^5.16.1",
    "cache-manager-redis-store": "^2.0.0",
    "difference": "^1.0.2",
    "gstore-node": "^7.2.6",
    "ioredis": "^4.28.2",
    "lodash": "^4.17.21"
  },
  "devDependencies": {
    "@babel/cli": "^7.16.7",
    "@babel/core": "^7.16.7",
    "@babel/plugin-transform-modules-commonjs": "^7.16.5",
    "@babel/plugin-transform-runtime": "^7.16.5",
    "@babel/preset-env": "^7.16.5",
    "jest": "^27.4.5"
  }
}

数据模型的 index.js 只是:

module.exports = Object.assign(
    {},
    require('./dist/garage'),
    require('./dist/car'),
    require('./dist/bike'),
    require('./dist/util/cacheService'),
);

我是 npm 和 babel 的新手,但我的理解是,当我将数据模型构建到 /dist babel 时,它会转换任何需要的东西,然后当我使用 main-function babel 中的模块时,它应该会被淘汰图片的。 显然我的理解是错误的,但是哪里呢?

我终于设法解决了这个问题,但被 CloudFunction 抛出的 babel/cli 错误消息搞得有点不知所措。

问题是我的数据模型模块在另一个目录中:
"data-model": "file:../../data-model",

我把它放在主函数中:
"data-model": "file:data-model", 它可以很好地部署到云功能。

为什么会这样,所以我不知道,但 Google Cloud Docs 中也有记录:

The code for this local module should be stored somewhere other than the node_modules folder within your function's root directory.