@bencapp3/react-native-static-server
Version:
Embedded HTTP server for React Native
105 lines (70 loc) • 3.51 kB
Markdown
# React Native Static Server (v0.6, v0.5)
_This documentation is for older library versions **v0.6** and **v0.5**. For newer versions (**v0.7**+) see the main [README.md](./README.md)_
## Getting started
- Install the package
```shell
$ npm install --save .pogodin/react-native-static-server
```
- If you intend to use this library in an [Expo app](https://expo.dev),
it is possible, but requires additional setup efforts.
See [this discussion](https://github.com/birdofpreyru/react-native-static-server/issues/8#issuecomment-1211605867)
for details.
## Usage
Declare the `StaticServer` with a port or use the default `0` to pick a random available port.
```jsx
import StaticServer from '.pogodin/react-native-static-server';
let server = new StaticServer(8080);
// Start the server
server.start().then((url) => {
console.log("Serving at URL", url);
});
// Stop the server
server.stop();
// Check if native server running
const isRunning = await server.isRunning()
// isRunning - true/false
```
`StaticServer` serves from the document directory (default) or takes an optional absolute path to serve from.
For instance, using [react-native-fs](https://github.com/johanneslumpe/react-native-fs) you can get the document directory and specify a directory from there.
#### Default (document directory)
```javascript
import StaticServer from '.pogodin/react-native-static-server';
import RNFS from 'react-native-fs';
// create a path you want to write to
let path = RNFS.DocumentDirectoryPath + '/www';
let server = new StaticServer(8080, path);
```
#### Custom folder (iOS)
##### Create the folder for static files
Create a folder in your project's top-level directory (usually next to your node_modules and index.js file), and put the files you want to access over http in there.
##### Add folder (static files) to XCode
This folder **must be added to XCode** so it gets bundled with the app.
In XCode, `Project Navigator` right click in the folder project → `Add files to "<project>"` → Select the static folder **and clic options (Uncheck copy items if needed, Create folder references)** so don't duplicate files → Clic Add.
When the app gets bundled, this folder will be next to the compiled app, so using `MainBundlePath` property from `react-native-fs` you can access to the directory.
```javascript
import StaticServer from '.pogodin/react-native-static-server';
import RNFS from 'react-native-fs';
// path where files will be served from (index.html here)
let path = RNFS.MainBundlePath + '/www';
let server = new StaticServer(8080, path);
```
If the server should only be accessible from within the app, set `localOnly` to `true`
```javascript
import StaticServer from '.pogodin/react-native-static-server';
// Just set options with defaults
let server = new StaticServer({localOnly : true });
// Or also valid are:
let server = new StaticServer(8080, {localOnly : true });
let server = new StaticServer(8080, path, {localOnly : true });
```
If the server should not pause when the app is in the background, set `keepAlive` to `true`
```javascript
let server = new StaticServer({keepAlive : true });
```
Passing `0` as the port number will cause a random port to be assigned every time the server starts.
It will reset to a new random port each time the server unpauses, so this should only be used with `keepAlive`.
```javascript
let server = new StaticServer(0, {keepAlive : true });
```
<!-- links -->
[Babel]: https://babeljs.io/