react / react/react-native

@react-native/babel-preset imports from react-native not deferred (lazy requires)

Đang mở
#44,660 1 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Issue: Author Provided Repro Newer Patch Available
Ngôn ngữ chính
C++
Star
127k
Fork
25.3k
Merge trung bình
1 ngày 23 giờ
Pull request đã merge (30 ngày)
4

Mô tả

Description

Failing test repro

The expected behaviour of @react-native/babel-preset is to defer the evaluation of a subset of react-native modules until the scope in which they are first referenced: https://github.com/facebook/react-native/blob/main/packages/react-native-babel-preset/src/configs/main.js#L76

This is no longer happening (as @babel/plugin-transform-modules-commonjs passes the source string to the lazy callback, not the expected import specifier). See test 2.

Steps to reproduce
git clone git@github.com:stevoland/RNTest.git
git checkout lazy-imports-repro
yarn
yarn test babel.test
React Native Version

0.73.4

Affected Platforms

Runtime - Android, Runtime - iOS

Output of npx react-native info
System:
  OS: macOS 14.1
  CPU: (12) arm64 Apple M2 Pro
  Memory: 898.08 MB / 32.00 GB
  Shell:
    version: 3.2.57
    path: /bin/bash
Binaries:
  Node:
    version: 18.18.0
    path: ~/.nvm/versions/node/v18.18.0/bin/node
  Yarn:
    version: 1.22.19
    path: ~/.nvm/versions/node/v18.18.0/bin/yarn
  npm:
    version: 9.8.1
    path: ~/.nvm/versions/node/v18.18.0/bin/npm
  Watchman:
    version: 2024.04.15.00
    path: /opt/homebrew/bin/watchman
Managers:
  CocoaPods:
    version: 1.11.3
    path: /usr/local/bin/pod
SDKs:
  iOS SDK:
    Platforms:
      - DriverKit 23.0
      - iOS 17.0
      - macOS 14.0
      - tvOS 17.0
      - watchOS 10.0
  Android SDK: Not Found
IDEs:
  Android Studio: 2021.1 AI-211.7628.21.2111.8309675
  Xcode:
    version: 15.0/15A240d
    path: /usr/bin/xcodebuild
Languages:
  Java:
    version: 21.0.3
    path: /Users/stephen.collings/.sdkman/candidates/java/current/bin/javac
  Ruby:
    version: 2.6.10
    path: /usr/bin/ruby
npmPackages:
  "@react-native-community/cli": Not Found
  react:
    installed: 18.2.0
    wanted: 18.2.0
  react-native:
    installed: 0.73.4
    wanted: 0.73.4
  react-native-macos: Not Found
npmGlobalPackages:
  "*react-native*": Not Found
Android:
  hermesEnabled: true
  newArchEnabled: false
iOS:
  hermesEnabled: Not found
  newArchEnabled: false
Stacktrace or Logs
FAIL  __tests__/lazy-imports.test.ts
  ✕ should defer select react-native imports (403 ms)
  ✓ should defer all imports (26 ms)

  ● should defer select react-native imports

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `should defer select react-native imports 1`

    - Snapshot  - 1
    + Received  + 1

    - "function _reactNative(){var data=require("react-native");_reactNative=function _reactNative(){return data;};return data;}var a=function a(){return _reactNative().AccessibilityInfo;};"
    + "var _reactNative=require("react-native");var a=function a(){return _reactNative.AccessibilityInfo;};"

      17 | const a = () => AccessibilityInfo`;
      18 |
    > 19 |   expect(transform(input)).toMatchInlineSnapshot(
         |                            ^
      20 |     `"function _reactNative(){var data=require("react-native");_reactNative=function _reactNative(){return data;};return data;}var a=function a(){return _reactNative().AccessibilityInfo;};"`,
      21 |   );
      22 | });

      at Object.toMatchInlineSnapshot (__tests__/lazy-imports.test.ts:19:28)
Reproducer

https://github.com/stevoland/RNTest/commit/02effcb07917e94cd2d5a87670a69d6c0e627fc1

Screenshots and Videos

No response

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Hành vi này được bao phủ bởi tests/lazy-imports.test.ts và cấu hình lazy-import của preset trong packages/react-native-babel-preset/src/configs/main.js. Trước tiên, hãy chạy các lệnh tái hiện và kiểm tra cách phép chuyển đổi CommonJS của Babel cung cấp lazy callback; hoàn tất khi snapshot của select-import một lần nữa hiển thị việc đánh giá trì hoãn và bài kiểm thử đạt.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
react-native, typescript
Lĩnh vực
build-system, mobile
Loại issue
Lỗi
Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
35/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.