You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Cloud Functions使用require语句部署失败,寻求解决方案

解决Google Cloud Functions添加require后部署失败的问题

嘿,这个问题我之前帮朋友处理过,其实核心就是Cloud Functions需要知道你代码里用到的第三方包,得在package.json里明明白白声明出来才行!你遇到的“Function is active, but the last deploy failed”警告,本质就是部署时环境找不到你require的依赖包,下面一步步给你讲怎么搞定:

1. 为什么会出现这个警告?

Google Cloud Functions在部署Node.js函数时,会读取目录下的package.json文件,自动安装里面列出的依赖。如果你的代码里用了require('stripe')但没在package.json里声明stripe依赖,部署过程就会因为找不到这个包而失败——虽然旧版本的函数还能运行,但新的部署就挂了。

2. 如何创建/完善package.json?

步骤1:初始化package.json

在你的Cloud Functions代码所在的本地目录里,打开终端运行:

npm init -y

这个命令会自动生成一个默认的package.json文件,不用手动填一堆繁琐信息。

步骤2:添加Stripe依赖

接下来安装Stripe包,它会自动把依赖信息写入package.json:

npm install stripe

如果你想指定稳定版本,也可以加上版本号:

npm install stripe@^12.17.0

3. 完整的package.json示例

生成后的package.json大概长这样,你可以根据自己的使用场景调整:

{
  "name": "stripe-payment-function",
  "version": "1.0.0",
  "description": "Handle Stripe payment intents for Android app",
  "main": "index.js",
  "dependencies": {
    "stripe": "^12.17.0",
    // 如果你用Firebase Cloud Functions,需要添加这个:
    "firebase-functions": "^4.4.1"
    // 如果你用纯Google Cloud Functions,添加这个:
    // "@google-cloud/functions-framework": "^3.3.0"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": ["stripe", "google-cloud-functions", "android-payment"],
  "author": "",
  "license": "ISC"
}

4. 对应的Cloud Functions代码示例

如果你用Firebase Cloud Functions:

const functions = require('firebase-functions');
// 强烈建议用环境变量存秘钥,不要硬编码!
const stripe = require('stripe')(functions.config().stripe.secret_key);

exports.createPaymentIntent = functions.https.onRequest(async (req, res) => {
  try {
    // 从Android端接收金额(注意:Stripe金额单位是分,比如100=1美元)
    const { amount, currency } = req.body;
    
    const paymentIntent = await stripe.paymentIntents.create({
      amount: parseInt(amount),
      currency: currency || 'usd',
    });

    res.status(200).json({ clientSecret: paymentIntent.client_secret });
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
});

如果你用纯Google Cloud Functions:

const functionsFramework = require('@google-cloud/functions-framework');
// 用环境变量获取秘钥更安全
const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);

// 注册HTTP触发的函数
functionsFramework.http('createPaymentIntent', async (req, res) => {
  try {
    const { amount, currency } = req.body;
    
    const paymentIntent = await stripe.paymentIntents.create({
      amount: parseInt(amount),
      currency: currency || 'usd',
    });

    res.status(200).json({ clientSecret: paymentIntent.client_secret });
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
});

5. 部署的关键注意事项

  • 不要硬编码秘钥:把Stripe的秘钥存在Cloud Functions的环境变量里,比如用Google Cloud CLI部署时:
    gcloud functions deploy createPaymentIntent --runtime nodejs18 --trigger-http --set-env-vars STRIPE_SECRET_KEY=your_actual_stripe_secret_key
    
    用Firebase的话,运行firebase functions:config:set stripe.secret_key="your_key",然后代码里用functions.config().stripe.secret_key获取。
  • 确保部署目录正确:部署时要在包含package.json和代码文件的目录下执行命令,否则Cloud Functions找不到依赖配置。

内容的提问来源于stack exchange,提问作者John Mansell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:09:33