部署到 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.
我有一个 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.