`codegen - javaPackageName` 在 `includesGeneratedCode` 和 `react-native codegen` 中被忽略,

roqulrg3  于 4个月前  发布在  React
关注(0)|答案(8)|浏览(101)

描述

react-native codegen 忽略了 package.json/codeGenConfig/andorid/javaPackageName 中的 javaPackageName,并使用了 com.facebook.fbreact.specs

重现步骤

请参考 https://github.com/mfazekas/rn-codegen-javapackagename
请查看 react-native/packages/react-native/scripts/codegen/generate-artifacts-executor.js 的第454行至第462行 2a6a895
| | generateSpecsCLIExecutor.generateSpecFromInMemorySchema( |
| | platform, |
| | schemaInfo.schema, |
| | tmpOutputDir, |
| | libraryName, |
| | 'com.facebook.fbreact.specs', |
| | schemaInfo.library.config.type, |
| | useLocalIncludePaths, |
| | ); |

React Native 版本

0.74.2

受影响的平台

运行时 - Android

领域

代码生成

npx react-native info 的输出

% npx react-native info
info Fetching system and libraries information...
System:
  OS: macOS 14.5
  CPU: (12) arm64 Apple M2 Max
  Memory: 118.64 MB / 32.00 GB
  Shell:
    version: "5.9"
    path: /bin/zsh
Binaries:
  Node:
    version: 18.20.2
    path: ~/.nvm/versions/node/v18.20.2/bin/node
  Yarn:
    version: 3.6.4
    path: ~/.nvm/versions/node/v18.20.2/bin/yarn
  npm:
    version: 10.5.0
    path: ~/.nvm/versions/node/v18.20.2/bin/npm
  Watchman:
    version: 2024.05.06.00
    path: /opt/homebrew/bin/watchman
Managers:
  CocoaPods:
    version: 1.14.2
    path: /Users/boga/.rbenv/shims/pod
SDKs:
  iOS SDK:
    Platforms:
      - DriverKit 23.5
      - iOS 17.5
      - macOS 14.5
      - tvOS 17.5
      - visionOS 1.2
      - watchOS 10.5
  Android SDK: Not Found
IDEs:
  Android Studio: 2024.1 AI-241.15989.150.2411.11948838
  Xcode:
    version: 15.4/15F31d
    path: /usr/bin/xcodebuild
Languages:
  Java:
    version: 20.0.1
    path: /usr/bin/javac
  Ruby:
    version: 2.7.8
    path: /Users/boga/.rbenv/shims/ruby
npmPackages:
  "@react-native-community/cli": Not Found
  react:
    installed: 18.2.0
    wanted: 18.2.0
  react-native:
    installed: 0.74.2
    wanted: 0.74.2
  react-native-macos: Not Found
npmGlobalPackages:
  "*react-native*": Not Found
Android:
  hermesEnabled: true
  newArchEnabled: true
iOS:
  hermesEnabled: Not found
  newArchEnabled: false

堆栈跟踪或日志

n/a

可复现步骤

https://github.com/mfazekas/rn-codegen-javapackagename/

截图和视频

  • 无响应*
vs3odd8k

vs3odd8k1#

这是一个已知的bug。问题无论你是否使用includesGeneratedCode都会发生。
我已经有一个内部票据来解决这个问题。
遗憾的是,修复它将对每个代码生成用户造成破坏性的变化,所以我们在何时修复方面要谨慎一些。

7ivaypg9

7ivaypg92#

感谢cortinico。
另一个问题是outputDir不是相对于包根目录,而是相对于当前工作目录。因此,在复现器中运行:

cd ReproducerApp
npx react-native codegen --path ../RTNCalculator --platform android

它会生成./android/codegen,而不是../RTNCalculator/android/codegen
RTNCalculator/package.json :

"includesGeneratedCode": true,
    "outputDir": {
      "android": "android/codegen"
    }

这是个bug吗?我应该为它单独开一个问题吗?

weylhg0b

weylhg0b3#

它生成了 ./android/codegen,而不是 ../RTNCalculator/android/codegen

我不确定这是否符合你之前的陈述。

如果正如你所说,路径是相对于当前工作目录的(在你的示例中是 ./ReproducerApp),那么内容应该生成在:

./RTNCalculator/android/codegen

不是吗?

sigwle7e

sigwle7e4#

我不确定这是否符合你之前的陈述。如果正如你所说,路径是相对于当前工作目录的(在你的例子中是 ./ReproducerApp),那么内容应该生成在:

./RTNCalculator/android/codegen

不是吗?
抱歉如果我说得不清楚。我本以为

"includesGeneratedCode": true,
    "outputDir": {
      "android": "android/codegen"
    }

总是生成到 RTNCaclulator/android/codegen ,所以总是进入库,但如果我从应用程序目录运行它会在应用程序中创建一个新文件夹

cd ReproducerApp
npx react-native codegen --path ../RTNCalculator --platform android

它生成到 ReproducerApp/android/codegen

ReproducerApp % ls -la android/codegen/java/com/rtncalculator 
total 8
drwxr-xr-x  3 boga  staff    96 Jun 20 14:24 .
drwxr-xr-x  4 boga  staff   128 Jun 20 14:24 ..
-rw-r--r--  1 boga  staff  1130 Jun 20 14:24 NativeRTNCalculatorSpec.java
3mpgtkmj

3mpgtkmj5#

@dmytrorykun 在这里可以帮您更多,因为他执行了 react-native codegen 命令。但是是的,这可能是一个单独的错误,需要单独的问题。

zaqlnxep

zaqlnxep6#

这绝对是个错误。我来看看

kupeojn6

kupeojn67#

@dmytrorykun打开了问题#45112

t9eec4r0

t9eec4r08#

我们一直在解决react-native-builder-bob中的问题。我已经在那里添加了一个脚本来修补这种行为。对于那些想要使用这个的人,当我们将其部署到bob时,你们将能够用--target codegen调用它,它应该生成代码生成规范并修补这个问题。

相关问题