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

Expo:如何在指纹识别与构建任务前统一运行Node脚本

解决方案

有两种可靠的方式可以让你的域名生成脚本在EAS指纹识别和构建任务读取app.config.js前执行:

方法一:在app.config.js中动态获取域名(推荐)

直接把API调用逻辑整合到app.config.js里,让配置文件在加载时自动拉取并生成appDomains列表,完全不需要依赖npm脚本钩子,从根源上避免执行时机问题。

示例代码:

// app.config.js
const fetch = require('node-fetch'); // 若环境未内置fetch,需先安装node-fetch

async function getAppDomains() {
  try {
    const res = await fetch('你的API地址');
    const data = await res.json();
    return data.domains; // 假设API返回结构包含domains数组
  } catch (err) {
    console.error('获取appDomains失败:', err);
    // 可选:设置默认域名作为降级方案
    return ['default.example.com'];
  }
}

module.exports = async () => {
  const appDomains = await getAppDomains();
  return {
    expo: {
      name: '你的应用名',
      slug: '你的应用slug',
      // 其他基础配置
      ios: {
        appDomains: appDomains,
        // 其他iOS配置
      }
    }
  };
};

这样不管是EAS构建还是指纹识别任务,只要读取app.config.js就会自动执行API调用,确保appDomains始终是最新的。

方法二:同时配置多个npm脚本钩子

如果必须保留独立的Node脚本,可同时在package.json中配置postinstall和eas-build-pre-install钩子,让脚本在两个任务的关键节点都执行:

  1. 先把域名生成脚本封装成单独的npm命令:
// package.json
{
  "scripts": {
    "generate:app-domains": "node ./scripts/generate-app-domains.js",
    "postinstall": "npm run generate:app-domains",
    "eas-build-pre-install": "npm run generate:app-domains"
  }
}
  1. 优化生成脚本,确保文件路径正确且具备幂等性:
// scripts/generate-app-domains.js
const fs = require('fs');
const path = require('path');
const fetch = require('node-fetch');

async function generateAppDomains() {
  const res = await fetch('你的API地址');
  const data = await res.json();
  const domains = data.domains;

  // 生成被app.config.js引用的配置文件
  const configContent = `module.exports = { appDomains: ${JSON.stringify(domains)} };`;
  fs.writeFileSync(path.resolve(__dirname, '../app-domains.config.js'), configContent);
}

generateAppDomains().catch(err => {
  console.error('生成appDomains失败:', err);
  process.exit(1); // 终止进程,避免任务使用错误配置
});
  1. 在app.config.js中引用生成的配置文件:
// app.config.js
const { appDomains } = require('./app-domains.config.js');

module.exports = {
  expo: {
    // ...其他配置
    ios: {
      appDomains: appDomains
    }
  }
};

这种方式下,指纹识别任务会触发postinstall执行脚本,构建任务会在依赖安装前通过eas-build-pre-install执行脚本,确保app.config.js读取时文件已存在。


内容的提问来源于stack exchange,提问作者Starsky Torchia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 01:27:12