В итоге мы использовали скрипт gulp для перезаписи веб-пакета.Этапы:
1) Сборка сменных пакетов
Мы создали веб-версию для каждого React Native Third Party.Для act-native-vector-icons все оказалось довольно просто:
import React from 'react';
export const Icon = (props) => <div className="material-icons"
style={{color:props.color}}>
{props.name}
</div>;
export default Icon;
2) Настройте конфигурацию Webpack
Использованиеgulp перезаписываем конфигурацию веб-пакета create-Reaction-app с помощью:
resolve: {
modules: ...
alias: {
"babel-runtime": path.dirname(
require.resolve("babel-runtime/package.json")
),
"react-native": "@ourcompany/react-native-web",
"react-native-vector-icons": "@ourcompany/react-native-vector-icons",
...
Скрипт задачи gulp:
gulp.task("copyWebpack", function() {
return gulp
.src(["package.json", "src/_webpack/*.js"])
.pipe(
gulp.dest(
path.resolve(pathWeb + "/node_modules/react-scripts/config")
)
);
});
Примечание:
- Извлечение конфигурации create-реагировать-приложения чище, однако это означает, что вам нужно будет сохранить конфигурацию, и мы предпочли оставить конфигурацию как есть и перезаписать ее в процессе сборки.
- Вы могли бы заметить, что мы перезаписали сам реактивную нативную сеть.Подробнее об этом на следующем необязательном шаге.
3) Расширьте реактивную нативную сеть (необязательно)
Если вы используете компоненты, которые Reaction-native-web пока не поддерживает, вам нужно собрать пакеты для них и расширить реагировать-родной-веб , чтобы ваша веб-версия работала.Просто создайте новый пакет @ yourcompany / Reaction-native-web и сгенерируйте index.js , в который импортируются компоненты, которые существуют в act-native-web и ссылки на те, которые вы создали.Обратите внимание, что когда мы создавали наш проект реагировать на родную сеть , у него не было FlatList или SectionList, и теперь (октябрь 2018 года) он имеет оба (модальный по-прежнему отсутствует: -)).
import {
StyleSheet as _StyleSheet,
View as _View,
Text as _Text,
Image as _Image,
I18nManager as _I18nManager,
AsyncStorage as _AsyncStorage,
Platform as _Platform,
Linking as _Linking,
ActivityIndicator as _ActivityIndicator,
ListView as _ListView,
Modal as _Modal,
Picker as _Picker,
RefreshControl as _RefreshControl,
TextInput as _TextInput,
Touchable as _Touchable,
TouchableHighlight as _TouchableHighlight,
TouchableNativeFeedback as _TouchableNativeFeedback,
TouchableOpacity as _TouchableOpacity,
TouchableWithoutFeedback as _TouchableWithoutFeedback,
Dimensions as _Dimensions,
Animated as _Animated,
ScrollView as _ScrollView,
SafeAreaView as _SafeAreaView,
BackHandler as _BackHandler,
Switch as _Switch,
NetInfo as _NetInfo,
AppState as _AppState,
ColorPropType as _ColorPropType,
} from 'react-native-web';
import {SectionList as _SectionList} from './SectionList';
import {FlatList as _FlatList} from './FlatList';
import {Alert as _Alert} from './Alert';
import {WebView as _WebView} from './WebView';
import {Share as _Share} from './Share';
import {PermissionsAndroid as _PermissionsAndroid} from './PermissionsAndroid';
import {ActionSheetIOS as _ActionSheetIOS} from './ActionSheetIOS';
import {ToastAndroid as _ToastAndroid} from './ToastAndroid';
export const StyleSheet = _StyleSheet;
export const View = _View;
export const Text = _Text;
export const Image = _Image;
export const I18nManager = _I18nManager;
export const AsyncStorage = _AsyncStorage;
export const Platform = _Platform;
export const Linking = _Linking;
export const ActivityIndicator = _ActivityIndicator;
export const ListView = _ListView;
export const Modal = _Modal;
export const Picker = _Picker;
export const RefreshControl = _RefreshControl;
export const TextInput = _TextInput;
export const Touchable = _Touchable;
export const TouchableHighlight = _TouchableHighlight;
export const TouchableNativeFeedback = _TouchableNativeFeedback;
export const TouchableOpacity = _TouchableOpacity;
export const TouchableWithoutFeedback = _TouchableWithoutFeedback;
export const Dimensions = _Dimensions;
export const Animated = _Animated;
export const ScrollView = _ScrollView;
export const SafeAreaView = _SafeAreaView;
export const BackHandler = _BackHandler;
export const Switch = _Switch;
export const NetInfo = _NetInfo;
export const AppState = _AppState;
export const Alert = _Alert;
export const Share = _Share;
export const WebView = _WebView;
export const PermissionsAndroid = _PermissionsAndroid;
export const ActionSheetIOS = _ActionSheetIOS;
export const ToastAndroid = _ToastAndroid;
export const SectionList = _SectionList;
export const FlatList = _FlatList;
export const ColorPropType = _ColorPropType;