如何在React Native的 run-android中,通过npm run dev传递Gradle的 --offline标志?
我有一个自定义 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构造参数的正确方式
我的需求
一个可靠的实现方式:
- 从以下内容中检测
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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。