@react-native/babel-preset imports from react-native not deferred (lazy requires)
Chưa có ai nhận issue này.
- 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
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
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- 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.
- Fork repository và làm thay đổi trên một nhánh.
- 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