expo / expo

An open-source framework for making universal native apps with React. Expo runs on Android, iOS, and the web.
https://docs.expo.dev
MIT License
29.64k stars 4.7k forks source link

Working with monorepos, using local modules, and using 'eas build' leads to a 'Not found' error. #28687

Closed Mfweb closed 1 week ago

Mfweb commented 1 week ago

Summary

I followed the documentation and created app/test-autolinking-app1 and packages/test-native-data.

In the app, I added a dependency: "dependencies": {"test-native-data": "*"}.

Using yarn android in the app/test-autolinking-app1 directory works fine with the native module.

However, when I compile using eas build --platform android --local --profile production --output build/test.apk, I get an error:

[INSTALL_DEPENDENCIES] error Error: https://registry.yarnpkg.com/test-native-data: Not found
[INSTALL_DEPENDENCIES]     at params.callback [as _callback] (/opt/homebrew/Cellar/yarn/1.22.22/libexec/lib/cli.js:66680:18)
[INSTALL_DEPENDENCIES]     at self.callback (/opt/homebrew/Cellar/yarn/1.22.22/libexec/lib/cli.js:141410:22)
[INSTALL_DEPENDENCIES]     at Request.emit (node:events:518:28)
[INSTALL_DEPENDENCIES]     at Request.<anonymous> (/opt/homebrew/Cellar/yarn/1.22.22/libexec/lib/cli.js:142382:10)
[INSTALL_DEPENDENCIES]     at Request.emit (node:events:518:28)
[INSTALL_DEPENDENCIES]     at IncomingMessage.<anonymous> (/opt/homebrew/Cellar/yarn/1.22.22/libexec/lib/cli.js:142304:12)
[INSTALL_DEPENDENCIES]     at Object.onceWrapper (node:events:632:28)
[INSTALL_DEPENDENCIES]     at IncomingMessage.emit (node:events:530:35)
[INSTALL_DEPENDENCIES]     at endReadableNT (node:internal/streams/readable:1696:12)
[INSTALL_DEPENDENCIES]     at process.processTicksAndRejections (node:internal/process/task_queues:82:21)
[INSTALL_DEPENDENCIES] info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
[INSTALL_DEPENDENCIES]

I tried changing the dependency from "test-native-data": "*" to "test-native-data": "file:/xxx" by adding the absolute path, and then it compiled successfully. I noticed that the packages folder wasn't included in the workdir[SETUP_WORKINGDIR] Preparing workingdir /var/folders/bs/cvxm5wl113bf80rf6___q_8m0000gn/T/eas-build-local-nodejs/4451d8cd-aed3-416b-8e13-f48e1c4a0a6d.

What platform(s) does this occur on?

Android

SDK Version

51

Environment

  expo-env-info 1.2.0 environment info:
    System:
      OS: macOS 14.4.1
      Shell: 5.9 - /bin/zsh
    Binaries:
      Node: 20.11.0 - ~/.nvs/default/bin/node
      Yarn: 1.22.22 - /opt/homebrew/bin/yarn
      npm: 10.4.0 - ~/.nvs/default/bin/npm
      Watchman: 2024.05.06.00 - /opt/homebrew/bin/watchman
    Managers:
      CocoaPods: 1.15.2 - /opt/homebrew/bin/pod
    SDKs:
      iOS SDK:
        Platforms: DriverKit 23.4, iOS 17.4, macOS 14.4, tvOS 17.4, visionOS 1.1, watchOS 10.4
    IDEs:
      Android Studio: 2023.3 AI-233.14808.21.2331.11709847
      Xcode: 15.3/15E204a - /usr/bin/xcodebuild
    npmGlobalPackages:
      eas-cli: 8.0.0
    Expo Workflow: managed

Minimal reproducible example

https://github.com/Mfweb/test-autolinking-build

brentvatne commented 1 week ago

hi there,

Mfweb commented 1 week ago
  • linking of native packages

This example doesn't work. I created a project using npx create-react-native-app --template with-yarn-workspaces without making any changes, then compiled it with eas build --platform android --profile production, but it still gives an error:

Running 'gradlew :app:bundleRelease' in /home/expo/workingdir/build/apps/mobile/android
Downloading https://services.gradle.org/distributions/gradle-8.6-all.zip
10%.
20%.
30%.
40%
50%.
60%.
70%.
80
%.
90
%.
100%
Welcome to Gradle 8.6!
Here are the highlights of this release:
- Configurable encryption key for configuration cache
 - Build init improvements
 - Build authoring improvements
For more details see https://docs.gradle.org/8.6/release-notes.html
To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to https://docs.gradle.org/8.6/userguide/gradle_daemon.html#sec:disabling_the_daemon in the Gradle documentation.
Daemon will be stopped at the end of the build
Path for java installation '/usr/lib/jvm/openjdk-17' (Common Linux Locations) does not contain a java executable
> Task :gradle-plugin:checkKotlinGradlePluginConfigurationErrors
> Task :gradle-plugin:pluginDescriptors
> Task :gradle-plugin:processResources
> Task :gradle-plugin:compileKotlin
> Task :gradle-plugin:compileJava NO-SOURCE
> Task :gradle-plugin:classes
> Task :gradle-plugin:jar
> Configure project :expo-modules-core
Warning: Errors during XML parse:
Warning: Additionally, the fallback loader failed to parse the XML.
Checking the license for package NDK (Side by side) 26.1.10909125 in /home/expo/Android/Sdk/licenses
License for package NDK (Side by side) 26.1.10909125 accepted.
Preparing "Install NDK (Side by side) 26.1.10909125 v.26.1.10909125".
"Install NDK (Side by side) 26.1.10909125 v.26.1.10909125" ready.
Installing NDK (Side by side) 26.1.10909125 in /home/expo/Android/Sdk/ndk/26.1.10909125
"Install NDK (Side by side) 26.1.10909125 v.26.1.10909125" complete.
"Install NDK (Side by side) 26.1.10909125 v.26.1.10909125" finished.
> Configure project :expo
Using expo modules
  - expo-asset (10.0.6)
  - expo-constants (16.0.1)
  - expo-file-system (17.0.1)
  - expo-font (12.0.4)
  - expo-keep-awake (13.0.1)
  - expo-modules-core (1.12.9)
Checking the license for package Android SDK Build-Tools 34 in /home/expo/Android/Sdk/licenses
License for package Android SDK Build-Tools 34 accepted.
Preparing "Install Android SDK Build-Tools 34 v.34.0.0".
"Install Android SDK Build-Tools 34 v.34.0.0" ready.
Installing Android SDK Build-Tools 34 in /home/expo/Android/Sdk/build-tools/34.0.0
"Install Android SDK Build-Tools 34 v.34.0.0" complete.
"Install Android SDK Build-Tools 34 v.34.0.0" finished.
Checking the license for package Android SDK Platform 34 in /home/expo/Android/Sdk/licenses
License for package Android SDK Platform 34 accepted.
Preparing "Install Android SDK Platform 34 (revision 3)".
"Install Android SDK Platform 34 (revision 3)" ready.
Installing Android SDK Platform 34 in /home/expo/Android/Sdk/platforms/android-34
"Install Android SDK Platform 34 (revision 3)" complete.
"Install Android SDK Platform 34 (revision 3)" finished.
Path for java installation '/usr/lib/jvm/openjdk-17' (Common Linux Locations) does not contain a java executable
> Task :expo-asset:preBuild UP-TO-DATE
> Task :expo-asset:preReleaseBuild UP-TO-DATE
> Task :expo-asset:generateReleaseResValues
> Task :expo-asset:generateReleaseResources
> Task :expo-constants:createExpoConfig
> Task :expo-constants:preBuild
> Task :expo-constants:preReleaseBuild
> Task :expo-constants:generateReleaseResValues
> Task :expo-constants:generateReleaseResources
> Task :expo-constants:packageReleaseResources
> Task :expo-file-system:preBuild
UP-TO-DATE
> Task :expo-file-system:preReleaseBuild
UP-TO-DATE
> Task :expo-asset:packageReleaseResources
> Task :expo-font:preBuild
UP-TO-DATE
> Task :expo-font:preReleaseBuild
UP-TO-DATE
> Task :expo-file-system:generateReleaseResValues
> Task :expo-file-system:generateReleaseResources
> Task :expo-font:generateReleaseResValues
> Task :expo-font:generateReleaseResources
> Task :expo-font:packageReleaseResources
> Task :expo-keep-awake:preBuild
UP-TO-DATE
> Task :expo-keep-awake:preReleaseBuild
UP-TO-DATE
> Task :expo-keep-awake:generateReleaseResValues
> Task :expo-keep-awake:generateReleaseResources
> Task :expo-keep-awake:packageReleaseResources
> Task :expo-modules-core:preBuild
UP-TO-DATE
> Task :expo-modules-core:preReleaseBuild
UP-TO-DATE
> Task :expo-file-system:packageReleaseResources
> Task :expo-modules-core:generateReleaseResValues
> Task :expo-modules-core:generateReleaseResources
> Task :expo-asset:extractDeepLinksRelease
> Task :expo-modules-core:packageReleaseResources
> Task :expo-constants:extractDeepLinksRelease
> Task :expo-asset:processReleaseManifest
> Task :expo-file-system:extractDeepLinksRelease
> Task :expo:generateExpoModulesPackageListTask
> Task :expo:preBuild
> Task :expo:preReleaseBuild
> Task :expo:generateReleaseResValues
> Task :expo:generateReleaseResources
> Task :expo:packageReleaseResources
> Task :expo:extractDeepLinksRelease
> Task :expo-constants:processReleaseManifest
> Task :expo-font:extractDeepLinksRelease
> Task :expo-file-system:processReleaseManifest
/home/expo/workingdir/build/node_modules/expo-file-system/android/src/main/AndroidManifest.xml:6:9-8:20 Warning:
    provider#expo.modules.filesystem.FileSystemFileProvider@android:authorities was tagged at AndroidManifest.xml:6 to replace other declarations but no other declaration present
> Task :expo-keep-awake:extractDeepLinksRelease
> Task :expo-font:processReleaseManifest
> Task :expo-modules-core:extractDeepLinksRelease
> Task :expo-modules-core:processReleaseManifest
/home/expo/workingdir/build/node_modules/expo-modules-core/android/src/main/AndroidManifest.xml:8:9-11:45 Warning:
    meta-data#com.facebook.soloader.enabled@android:value was tagged at AndroidManifest.xml:8 to replace other declarations but no other declaration present
> Task :expo-keep-awake:processReleaseManifest
> Task :expo:processReleaseManifest
> Task :expo:writeReleaseAarMetadata
> Task :expo-asset:writeReleaseAarMetadata
> Task :expo-file-system:writeReleaseAarMetadata
> Task :expo-constants:writeReleaseAarMetadata
> Task :expo-font:writeReleaseAarMetadata
> Task :expo-keep-awake:writeReleaseAarMetadata
> Task :expo-modules-core:writeReleaseAarMetadata
> Task :expo-asset:compileReleaseLibraryResources
> Task :expo:compileReleaseLibraryResources
> Task :expo:parseReleaseLocalResources
> Task :expo:generateReleaseRFile
> Task :expo-asset:parseReleaseLocalResources
> Task :expo-asset:generateReleaseRFile
> Task :expo-constants:compileReleaseLibraryResources
> Task :expo-constants:parseReleaseLocalResources
> Task :expo-constants:generateReleaseRFile
> Task :expo-file-system:compileReleaseLibraryResources
> Task :expo-file-system:parseReleaseLocalResources
> Task :expo-file-system:generateReleaseRFile
> Task :expo-font:compileReleaseLibraryResources
> Task :expo-font:parseReleaseLocalResources
> Task :expo-font:generateReleaseRFile
> Task :expo-keep-awake:compileReleaseLibraryResources
> Task :expo-keep-awake:parseReleaseLocalResources
> Task :expo-keep-awake:generateReleaseRFile
> Task :expo-modules-core:compileReleaseLibraryResources
> Task :expo-modules-core:parseReleaseLocalResources
> Task :expo-modules-core:generateReleaseRFile
> Task :expo:checkKotlinGradlePluginConfigurationErrors
> Task :expo:generateReleaseBuildConfig
> Task :expo-asset:checkKotlinGradlePluginConfigurationErrors
> Task :expo-asset:generateReleaseBuildConfig
> Task :expo-modules-core:checkKotlinGradlePluginConfigurationErrors
> Task :expo-modules-core:generateReleaseBuildConfig
> Task :app:createBundleReleaseJsAndAssets
warning: Bundler cache is empty, rebuilding (this may take a minute)
> Task :expo-modules-core:compileReleaseKotlin
> Task :app:createBundleReleaseJsAndAssets
Error: While trying to resolve module `expo-custom` from file `/home/expo/workingdir/build/apps/mobile/App.js`, the package `/home/expo/workingdir/build/node_modules/expo-custom/package.json` was successfully found. However, this package itself specifies a `main` module field that could not be resolved (`/home/expo/workingdir/build/node_modules/expo-custom/build/index.js`. Indeed, none of these files exist:
  * /home/expo/workingdir/build/node_modules/expo-custom/build/index.js(.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.mjs|.native.mjs|.mjs|.android.js|.native.js|.js|.android.jsx|.native.jsx|.jsx|.android.json|.native.json|.json|.android.cjs|.native.cjs|.cjs|.android.scss|.native.scss|.scss|.android.sass|.native.sass|.sass|.android.css|.native.css|.css)
  * /home/expo/workingdir/build/node_modules/expo-custom/build/index.js/index(.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.mjs|.native.mjs|.mjs|.android.js|.native.js|.js|.android.jsx|.native.jsx|.jsx|.android.json|.native.json|.json|.android.cjs|.native.cjs|.cjs|.android.scss|.native.scss|.scss|.android.sass|.native.sass|.sass|.android.css|.native.css|.css)
Error: While trying to resolve module `expo-custom` from file `/home/expo/workingdir/build/apps/mobile/App.js`, the package `/home/expo/workingdir/build/node_modules/expo-custom/package.json` was successfully found. However, this package itself specifies a `main` module field that could not be resolved (`/home/expo/workingdir/build/node_modules/expo-custom/build/index.js`. Indeed, none of these files exist:
  * /home/expo/workingdir/build/node_modules/expo-custom/build/index.js(.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.mjs|.native.mjs|.mjs|.android.js|.native.js|.js|.android.jsx|.native.jsx|.jsx|.android.json|.native.json|.json|.android.cjs|.native.cjs|.cjs|.android.scss|.native.scss|.scss|.android.sass|.native.sass|.sass|.android.css|.native.css|.css)
  * /home/expo/workingdir/build/node_modules/expo-custom/build/index.js/index(.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.mjs|.native.mjs|.mjs|.android.js|.native.js|.js|.android.jsx|.native.jsx|.jsx|.android.json|.native.json|.json|.android.cjs|.native.cjs|.cjs|.android.scss|.native.scss|.scss|.android.sass|.native.sass|.sass|.android.css|.native.css|.css)
    at DependencyGraph.resolveDependency (/home/expo/workingdir/build/node_modules/metro/src/node-haste/DependencyGraph.js:243:17)
    at /home/expo/workingdir/build/node_modules/metro/src/lib/transformHelpers.js:156:21
    at resolveDependencies (/home/expo/workingdir/build/node_modules/metro/src/DeltaBundler/buildSubgraph.js:42:25)
    at visit (/home/expo/workingdir/build/node_modules/metro/src/DeltaBundler/buildSubgraph.js:83:30)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async Promise.all (index 2)
    at async visit (/home/expo/workingdir/build/node_modules/metro/src/DeltaBundler/buildSubgraph.js:92:5)
    at async Promise.all (index 0)
    at async buildSubgraph (/home/expo/workingdir/build/node_modules/metro/src/DeltaBundler/buildSubgraph.js:103:3)
    at async Graph._buildDelta (/home/expo/workingdir/build/node_modules/metro/src/DeltaBundler/Graph.js:157:22)
> Task :app:createBundleReleaseJsAndAssets FAILED
> Task :expo-modules-core:compileReleaseKotlin
w: file:///home/expo/workingdir/build/node_modules/expo-modules-core/android/src/main/java/expo/modules/adapters/react/permissions/PermissionsService.kt:20:26 'Promise' is deprecated. AsyncFunction will crash when called. Use expo.modules.kotlin.Promise instead
w: file:///home/expo/workingdir/build/node_modules/expo-modules-core/android/src/main/java/expo/modules/adapters/react/permissions/PermissionsService.kt:63:51 'Promise' is deprecated. AsyncFunction will crash when called. Use expo.modules.kotlin.Promise instead
w: file:///home/expo/workingdir/build/node_modules/expo-modules-core/android/src/main/java/expo/modules/adapters/react/permissions/PermissionsService.kt:90:54 'Promise' is deprecated. AsyncFunction will crash when called. Use expo.modules.kotlin.Promise instead
w: file:///home/expo/workingdir/build/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/defaultmodules/CoreModule.kt:6:34 'ReactFeatureFlags' is deprecated. Deprecated in Java
w: file:///home/expo/workingdir/build/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/defaultmodules/CoreModule.kt:71:12 'ReactFeatureFlags' is deprecated. Deprecated in Java
w: file:///home/expo/workingdir/build/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/events/KModuleEventEmitterWrapper.kt:97:7 'constructor Event<T : Event<(raw) Event<*>>!>(Int)' is deprecated. Deprecated in Java
w: file:///home/expo/workingdir/build/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/types/JSTypeConverterHelper.kt:44:17 'get(String!): Any?' is deprecated. Deprecated in Java
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:createBundleReleaseJsAndAssets'.
> Process 'command 'node'' finished with non-zero exit value 1
* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.
BUILD FAILED in 3m 35s
71 actionable tasks: 71 executed
Error: Gradle build failed with unknown error. See logs for the "Run gradlew" phase for more information.
brentvatne commented 1 week ago

@Mfweb - you need to add a step to run yarn build in expo-custom directory, eg:

+++ b/packages/expo-custom/package.json
@@ -11,6 +11,7 @@
     "lint": "expo-module lint",
     "test": "expo-module test",
     "prepublishOnly": "expo-module prepublishOnly",
+    "postinstall": "yarn build",
     "expo-module": "expo-module"
   },

https://docs.expo.dev/build-reference/build-with-monorepos/