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

如何在package.json中判断是否使用Mac M1并按CPU架构条件执行脚本?

在package.json中根据Mac架构(M1/Intel)条件执行脚本

当然可以实现,核心思路是通过检测CPU架构标识来分支执行不同脚本,下面是两种实用方案:

方案1:直接用Shell命令判断(仅macOS)

macOS中,M1系列设备通过uname -m会返回arm64,Intel设备返回x86_64。你可以在package.json的脚本里直接写Shell条件判断:

{
  "scripts": {
    "start": "if [ \"$(uname -m)\" = \"arm64\" ]; then npm run start-m1; else npm run start-intel; fi",
    "start-m1": "echo '执行M1专属脚本逻辑'",
    "start-intel": "echo '执行Intel专属脚本逻辑'"
  }
}
  • 运行npm run start时,会自动根据当前设备架构调用对应的子脚本
  • 注意引号转义:JSON里的双引号需要用\转义,避免语法错误

方案2:用Node.js脚本做判断(更灵活)

如果需要跨平台兼容或者更复杂的逻辑,可以写一个简单的Node.js脚本作为入口:

  1. 新建arch-check.js文件:
const { arch } = process;
const { spawnSync } = require('child_process');

// 判断架构并执行对应脚本
if (arch === 'arm64') {
  spawnSync('npm', ['run', 'start-m1'], { stdio: 'inherit' });
} else if (arch === 'x64') {
  spawnSync('npm', ['run', 'start-intel'], { stdio: 'inherit' });
} else {
  console.error('当前设备架构不支持');
}
  1. 在package.json中配置脚本:
{
  "scripts": {
    "start": "node arch-check.js",
    "start-m1": "your-m1-specific-command",
    "start-intel": "your-intel-specific-command"
  }
}
  • process.arch在原生arm64的Node环境下返回arm64,Rosetta转译的x64 Node环境下返回x64,能准确区分实际运行环境

注意事项

  • 如果你的Node是通过Rosetta安装的x64版本,即使是M1设备,process.arch也会返回x64,这种情况下可以用sysctl -n machdep.cpu.brand_string检测CPU型号(比如包含Apple字样就是M1),但一般原生arm64 Node是更推荐的安装方式
  • 两种方案都可以扩展到其他架构的判断,比如Windows的x64等

内容的提问来源于stack exchange,提问作者sina farbod

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:31:13