如何在React Native的 run-android中,通过npm run dev传递Gradle的 --offline标志?

移动开发 2026-07-09

我有一个自定义 dev.js 脚本,用来在Android上运行我的React Native应用,使用 react-native run-android

我希望能够运行:

npm run dev gradle-offline

……并让它自动把 --offline 传递给Gradle(通过React Native CLI)。


当前脚本

const { spawn } = require('child_process');
const os = require('os');

const isGradleOffline = process.argv.includes('gradle-offline');

if (os.type() === 'Linux' || os.type() === 'Darwin') {
  spawn(
    `ENVFILE=/envs/.env.dev react-native run-android --active-arch-only --appIdSuffix debug ${isGradleOffline ? '-- --offline' : ''}`,
    [],
    { shell: true, stdio: 'inherit' }
  );
} else if (os.type() === 'Windows_NT') {
  spawn(
    `SET ENVFILE=/envs/.env.dev && react-native run-android --active-arch-only --appIdSuffix debug ${isGradleOffline ? '-- --offline' : ''}`,
    [],
    { shell: true, stdio: 'inherit' }
  );
} else {
  throw new Error(`Unsupported OS found: ${os.type()}`);
}

问题

当我运行时:

npm run dev gradle-offline

我不确定以下是否正确:

  • process.argv 是否是检测标志位的正确方式
  • -- --offline 是否已正确转发给Gradle
  • 这是为 spawn 构造参数的正确方式

我的需求

一个可靠的实现方式:

  1. 从以下内容中检测 gradle-offline

npm run dev gradle-offline 2.通过以下方式将 --offline 正确传递给Gradle

react-native run-android -- --offline 3.让它实现跨平台运行(Windows + macOS/Linux)


预期行为

  • npm run dev → 正常构建
  • npm run dev gradle-offline → Gradle在 --offline 下运行

问题

要想让这个脚本以正确的方式结构化,应该如何做到:

  • 来自npm的参数能被可靠地读取
  • Gradle标志能够被正确转发
  • 并且在离线模式开启时,能够对缓存的文件保持一致地工作

解决方案

process.argv.includes('gradle-offline’) 实际上没问题,尽管脚本的结构应该再安全一些。

另外,避免把整条命令作为一个shell字符串传递给shell。更好的做法是使用spawn(command, args),然后通过React Native CLI使用 '--extra-params' 来传递Gradle标志。

我对你的脚本做了点小改动,请用这个:

const { spawn } = require('child_process');

const os = require('os');



const args = process.argv.slice(2);

const isGradleOffline = args.includes('gradle-offline');



const command = os.type() === 'Windows_NT' ? 'npx.cmd' : 'npx';



const rnArgs = [

  'react-native',

  'run-android',

  '--active-arch-only',

  '--appIdSuffix',

  'debug',

];



if (isGradleOffline) {

  rnArgs.push('--extra-params', '--offline');

}



const child = spawn(command, rnArgs, {

  stdio: 'inherit',

  shell: false,

  env: {

    ...process.env,

    ENVFILE: '/envs/.env.dev',

  },

});



child.on('close', code => {

  process.exit(code);

});

也记得在package.json中添加以下内容:

{
"scripts": {
"dev": "node dev.js"
}
}

另外你还需要先运行这个命令把本地的所有依赖缓存 - npm run dev 之后就可以离线运行 - npm run dev gradle-offline

试试看,也许这会有帮助

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章