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钩子,让脚本在两个任务的关键节点都执行:
- 先把域名生成脚本封装成单独的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" } }
- 优化生成脚本,确保文件路径正确且具备幂等性:
// 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); // 终止进程,避免任务使用错误配置 });
- 在
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
相关产品推荐
相关产品推荐

