2016-01-25 20 views
17

Âm thanh Buck giống như một công cụ tuyệt vời cho cả dự án iOS và Android nhưng tôi không tìm thấy bất kỳ thông tin nào về cách sử dụng nó cho phản ứng gốc dự án.Tôi có thể sử dụng buck như thế nào để xây dựng ứng dụng gốc phản ứng cho cả iOS và Android

Cập nhật

Hình như có một số công việc đang được thực hiện về vấn đề này nhưng nó có thể không được nhận xét nào.

https://github.com/facebook/nuclide/issues/31#issuecomment-164897170 https://github.com/facebook/buck/tree/master/test/com/facebook/buck/js

Cập nhật 2

Pains sản phẩm liên kết https://productpains.com/post/react-native/add-buck-as-a-build-option

+1

Bạn có thể thu hẹp điều này xuống thành mor hay không e vấn đề cụ thể? Ngay bây giờ tôi không thấy làm thế nào người ta có thể trả lời một cách đáng tin cậy điều này mà không viết một hướng dẫn đầy đủ để thiết lập và xây dựng các dự án có nguồn gốc phản ứng với buck, mà với tôi có vẻ quá rộng. Liên kết – Michael

Trả lời

2

Không có tài liệu chính thức/mẫu để xây dựng các ứng dụng RN với Buck được nêu ra nhưng nó không phải là khó. Bạn cần thêm tệp BUCK tương đương với tệp build.gradle của bạn.

Đó là chủ yếu chỉ:

  • Tuyên bố ứng dụng Android với một sự phụ thuộc vào React Native from JCenter (Buck có android_binary quy tắc để làm điều đó)
  • Trong chế độ phát hành nó cũng bundles the JS thành tài sản của ứng dụng của bạn thư mục . Bạn có thể bỏ qua điều này để bắt đầu (trong chế độ dev, ứng dụng tìm nạp JS từ localhost khi chạy) nhưng tôi tin rằng Buck đã hỗ trợ sẵn để đóng gói JS.
+0

bị hỏng cho "gói JS" – user2977578

3

Cập nhật 2017/08/06:

tôi đã cố gắng theo các bước của tôi dưới đây cho việc tích hợp Phản ứng Native vào một ứng dụng với Buck iOS nhưng tôi chạy vào các vấn đề khi sử dụng Phản ứng Native 0.47. Thay vào đó, tôi có một cách tiếp cận đơn giản hơn để nhận React Native làm việc với Buck trên iOS bằng cách liên kết đến các thư viện dựng sẵn. Tôi đã chia nhánh repo của dự án mẫu Buck và làm việc với React Native ở số this repo. Tôi cũng đã cập nhật README trong repo đó với các hướng dẫn để chạy bản demo ứng dụng Buck React Native iOS và cách tích hợp chính mình.

Lưu ý rằng có một vài vấn đề với cách tiếp cận này được ghi trong README có thể hoặc không có vấn đề gì khi sử dụng ứng dụng này trong ứng dụng sản xuất.

Repo đó cũng không bó JS cho sản xuất. câu trả lời


cũ hơn:

tôi đã Buck làm việc với một dự án iOS. Nó là rất nhiều công việc đang tiến triển, nhưng hoạt động. Một vài lưu ý: file

  • tôi tự sao chép từ node_modules/react-native/Reactnode_modules/react-native/Libraries (xem cấu trúc thư mục dưới đây).
  • Tôi phải thêm các cờ -wWno-error vào mỗi thư viện vì dự án chính đã coi cảnh báo là lỗi và tôi không muốn thấy tất cả các cảnh báo Phản ứng gốc này trong Xcode.
  • Bạn có thể phải thêm nhiều thư viện hơn theo mẫu. Nó cũng giúp xem xét React Native podspec.
  • Có thể có cơ hội để làm sạch mọi thứ như không cần reactnative.xcodeproj trong thư mục vendor/reactnative (xem bên dưới).
  • Có thể có một số công việc cần thiết để gói chính xác JS cho sản xuất. Hiện tại, nó sẽ chỉ hoạt động nếu JS được lấy từ một máy chủ (ví dụ: Node.js).

Đây là vendor/reactnative/BUCK tập tin của tôi:

apple_library(
    name = 'ReactNative', 
    srcs = glob([ 
    'React/**/*.m', 
    'React/**/*.mm', 
    'React/**/*.c', 
    'React/**/*.S', 
    ]), 
    exported_headers = glob([ 
    'React/**/*.h', 
    ]), 
    system_frameworks = [ 
    'JavaScriptCore' 
    ], 
    exported_linker_flags = [ 
    '-lc++', 
    ], 
    compiler_flags = [ 
    '-Wno-error', 
    '-w' 
    ], 
    visibility = ['PUBLIC'], 
) 

apple_library(
    name = 'RCTWebSocket', 
    srcs = glob([ 
    'Libraries/WebSocket/*.m', 
    ]), 
    headers = glob([ 
    'React/**/*.h', 
    ]), 
    exported_headers = glob([ 
    'Libraries/WebSocket/*.h', 
    ]), 
    compiler_flags = [ 
    '-Wno-error', 
    '-w' 
    ], 
    visibility = ['PUBLIC'], 
    deps = [ 
    ':ReactNative', 
    ] 
) 

apple_library(
    name = 'RCTNetwork', 
    srcs = glob([ 
    'Libraries/Network/*.m', 
    ]), 
    headers = glob([ 
    'React/**/*.h', 
    ]), 
    exported_headers = glob([ 
    'Libraries/Network/*.h', 
    ]), 
    compiler_flags = [ 
    '-Wno-error', 
    '-w' 
    ], 
    visibility = ['PUBLIC'], 
    deps = [ 
    ':ReactNative', 
    ] 
) 

apple_library(
    name = 'RCTText', 
    srcs = glob([ 
    'Libraries/Text/*.m', 
    ]), 
    headers = glob([ 
    'React/**/*.h', 
    ]), 
    exported_headers = glob([ 
    'Libraries/Text/*.h', 
    ]), 
    compiler_flags = [ 
    '-Wno-error', 
    '-w' 
    ], 
    visibility = ['PUBLIC'], 
    deps = [ 
    ':ReactNative', 
    ] 
) 

apple_library(
    name = 'RCTImage', 
    srcs = glob([ 
    'Libraries/Image/*.m', 
    ]), 
    headers = glob([ 
    'React/**/*.h', 
    'Libraries/Network/*.h' 
    ]), 
    exported_headers = glob([ 
    'Libraries/Image/*.h', 
    ]), 
    compiler_flags = [ 
    '-Wno-error', 
    '-w' 
    ], 
    visibility = ['PUBLIC'], 
    deps = [ 
    ':ReactNative', 
    ':RCTNetwork' 
    ] 
) 

Dưới đây là cấu trúc thư mục bên trong một thư mục nhà cung cấp trong dự án của tôi:

vendor/reactnative 
├── BUCK 
├── Libraries 
│   ├── ART 
│   ├── ActionSheetIOS 
│   ├── AdSupport 
│   ├── Animated 
│   ├── AppRegistry 
│   ├── AppState 
│   ├── BatchedBridge 
│   ├── BugReporting 
│   ├── CameraRoll 
│   ├── Components 
│   ├── CustomComponents 
│   ├── DebugComponentHierarchy 
│   ├── Devtools 
│   ├── EventEmitter 
│   ├── Experimental 
│   ├── Fetch 
│   ├── Geolocation 
│   ├── Image 
│   ├── Inspector 
│   ├── Interaction 
│   ├── JavaScriptAppEngine 
│   ├── LayoutAnimation 
│   ├── Linking 
│   ├── LinkingIOS 
│   ├── Modal 
│   ├── NativeAnimation 
│   ├── NavigationExperimental 
│   ├── Network 
│   ├── Promise.js 
│   ├── PushNotificationIOS 
│   ├── QuickPerformanceLogger 
│   ├── RCTTest 
│   ├── RKBackendNode 
│   ├── ReactIOS 
│   ├── ReactNative 
│   ├── Sample 
│   ├── Settings 
│   ├── Storage 
│   ├── StyleSheet 
│   ├── Text 
│   ├── Utilities 
│   ├── Vibration 
│   ├── WebSocket 
│   ├── promiseRejectionIsError.js 
│   ├── react-native 
│   └── vendor 
├── React 
│   ├── Base 
│   ├── Executors 
│   ├── Layout 
│   ├── Modules 
│   ├── Profiler 
│   └── Views 
└── reactnative.xcodeproj 
    ├── project.pbxproj 
    └── xcuserdata 

Sau đó, trong deps file BUCK chính của tôi tôi thêm :

'//vendor/reactnative:ReactNative', 
'//vendor/reactnative:RCTWebSocket', 
'//vendor/reactnative:RCTText', 
'//vendor/reactnative:RCTNetwork', 
'//vendor/reactnative:RCTImage' 
Các vấn đề liên quan