Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/tdzl2003/react-native-web-platform

React Native on web
https://github.com/tdzl2003/react-native-web-platform

react reactnative web

Last synced: 18 days ago
JSON representation

React Native on web

Awesome Lists containing this project

README

        

# Real React Native on Web Platform

## Install:

First initialize your react-native project

```shell
react-native init MyProject
cd MyProject
```

Install this module.

```shell
yarn add react-native-web-platform
```

Configure your rn-cli.config.js to add web platform & provideModuleNodeModules:

```javascript
'use strict';

const config = {
// Add these lines if you already have a rn-cli.config.js
getPlatforms() {
return ['web'];
},

getProvidesModuleNodeModules() {
return [
'react-native',
'react-native-web-platform',
];
},
};

module.exports = config;
```

Add a launch.web.js and index.html in your project root:

```javascript
// launch.web.js

// Install polyfills in native thread.
require('regenerator-runtime/runtime');
require('es6-promise').polyfill();
require('isomorphic-fetch');
const { Bridge } = require('react-native-web-platform/lib/launch');

const bridge = new Bridge(
__DEV__ ?
'./index.bundle?platform=web' :
'./index.bundle.js'
);

bridge.start();

bridge.createRootView(document.body, 'YOUR_APP_NAME_HERE');
```

> Note: if your react native version <= 0.48.x, use following instead:

```javascript
// launch.web.js
const { Bridge } = require('react-native-web-platform/lib/launch');

const bridge = new Bridge(
__DEV__ ?
'./index.web.bundle?platform=web' :
'./index.bundle.js'
);

bridge.start();

bridge.createRootView(document.body, 'YOUR_APP_NAME_HERE');
```

index.html:

```html

YOUR_APP_NAME_HERE

body { margin: 0; } html, body { height: 100%; }
.pointer-events-none {
pointer-events: none;
}
.pointer-events-box-none * {
pointer-events: all;
}
.pointer-events-box-none {
pointer-events: none;
}
.pointer-events-box-only * {
pointer-events: none;
}
.pointer-events-box-only {
pointer-events: all;
}

```

index.release.html:

```html

YOUR_APP_NAME_HERE

body { margin: 0; } html, body { height: 100%; }
.pointer-events-none {
pointer-events: none;
}
.pointer-events-box-none * {
pointer-events: all;
}
.pointer-events-box-none {
pointer-events: none;
}
.pointer-events-box-only * {
pointer-events: none;
}
.pointer-events-box-only {
pointer-events: all;
}

```

If your react native version <= 0.48.x, you should also create a `index.web.js` with the content like `index.ios.js` or `index.android.js`:

## Debug

```shell
npm start
```

Then visit [http://localhost:8081/index.html](http://localhost:8081/index.html) to visit your page.

## Publish

#### version >= 0.49.x:

Linux & Mac:

```shell
mkdir build
mkdir build/web
react-native bundle --entry-file launch.web.js --platform web --dev false --bundle-output build/web/launch.bundle.js --assets-dest build/web
react-native bundle --entry-file index.js --platform web --dev false --bundle-output build/web/index.bundle.js --assets-dest build/web
cp index.release.html build/web/index.html
```

Windows:

```shell
md build
md build\web
react-native bundle --entry-file launch.web.js --platform web --dev false --bundle-output build/web/launch.bundle.js --assets-dest build/web
react-native bundle --entry-file index.js --platform web --dev false --bundle-output build/web/index.bundle.js --assets-dest build/web
copy index.release.html build\web\index.html
```

#### version <= 0.48.x

Linux & Mac:

```shell
mkdir build
mkdir build/web
react-native bundle --entry-file launch.web.js --platform web --dev false --bundle-output build/web/launch.bundle.js --assets-dest build/web
react-native bundle --entry-file index.web.js --platform web --dev false --bundle-output build/web/index.bundle.js --assets-dest build/web
cp index.release.html build/web/index.html
```

Windows:

```shell
md build
md build\web
react-native bundle --entry-file launch.web.js --platform web --dev false --bundle-output build/web/launch.bundle.js --assets-dest build/web
react-native bundle --entry-file index.web.js --platform web --dev false --bundle-output build/web/index.bundle.js --assets-dest build/web
copy index.release.html build\web\index.html
```

Then publish everything in `build/web` into your server.