React Native for Web配置

摘要:
更多内容参见个人技术博客,无广告欢迎关注ReactNativeforWeb配置兼容性:ReactNative0.55。“ReactNativeforWeb”使得可以使用ReactDOM在Web上运行ReactNative组件和API。高质量的Web界面:可以轻松地在JavaScript中创建fast,自适应的WebUI。编写一次,随处渲染:与现有的ReactDOM组件互操作,并与大多数ReactNativeAPI兼容。ReactNativeforWeb也可以使用Node.js渲染到服务器上的HTML和关键CSS。文档有关整体API,设计详细信息以及有关手势响应程序系统和动画的信息,请参阅ReactNative文档。指南这些指南详细介绍了如何使用ReactNative创建可访问的Web体验。
更多内容参见个人技术博客,无广告欢迎关注React Native for Web配置

兼容性:React Native 0.55

“React Native for Web”使得可以使用React DOM在Web上运行React Native组件和API。查看在Web上运行的React Native示例的实时演示。

  • 高质量的Web界面:可以轻松地在JavaScript中创建fast,自适应的Web UI。它提供原生质量的交互,支持多种输入模式(触摸,鼠标,键盘),优化的供应商前缀样式,内置支持RTL布局,内置可访问性,并与React Dev Tools集成。

  • 编写一次,随处渲染:与现有的React DOM组件互操作,并与大多数React Native API兼容。您可以为本机和Web开发新组件,而无需重写现有代码。React Native for Web也可以使用Node.js渲染到服务器上的HTML和关键CSS。

浏览器支持:Chrome,Firefox,Edge,Safari 7 +,IE 10+。

快速开始

最简单的入门方法是编辑此CodeSandbox模板(或Glitch)。你不需要安装任何东西来试试。

有关安装和配置的详细信息,请阅读入门指南。

文档

有关整体API,设计详细信息以及有关手势响应程序系统动画的信息,请参阅React Native文档

某些组件和API通过Web的其他功能进行了扩展。在少数情况下,网络上缺少Android或iOS的功能。这些差异记录在网站上

指南

这些指南详细介绍了如何使用React Native创建可访问的Web体验。某些特定于Web的模式记录在“Web配方”指南中。

入门 Webpack,看这篇就够了

.babelrc

{
"presets": [
"@babel/preset-env",
"@babel/preset-react",
"react-native"
],
"plugins": [
["module-resolver", {
"alias": {
"^react-native$": "react-native-web"
}
}]
]
}

package.json

{
"name": "rnweb",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"ios": "react-native run-ios",
"android": "react-native run-android",
"webdev": "./node_modules/.bin/webpack-dev-server -d --config ./web/webpack.config.js --inline --hot --colors",
"webprod": "./node_modules/.bin/webpack -p --config ./web/webpack.config.js",
"test": "jest"
},
"dependencies": {
"@babel/runtime": "^7.4.4",
"react": "^16.8.6",
"react-dom": "^16.8.6",
"react-native": "0.59.8",
"react-native-web": "^0.11.2"
},
"devDependencies": {
"@babel/cli": "^7.4.4",
"@babel/core": "^7.4.4",
"@babel/plugin-transform-runtime": "^7.4.4",
"@babel/preset-env": "^7.4.4",
"@babel/preset-react": "^7.0.0",
"babel-jest": "^24.8.0",
"babel-loader": "^8.0.6",
"babel-plugin-module-resolver": "^3.2.0",
"babel-plugin-react-native-web": "^0.11.2",
"babel-preset-react-native": "^5.0.2",
"jest": "^24.8.0",
"make-dir-cli": "^2.0.0",
"react-test-renderer": "16.8.3",
"source-map-loader": "^0.2.4",
"url-loader": "^1.1.2",
"webpack": "^4.31.0",
"webpack-cli": "^3.3.2",
"webpack-dev-server": "^3.3.1"
},
"jest": {
"preset": "react-native"
}
}

pasting

web/webpack.config.js

/**
* @Name webpack.config.js
* @Description react-native-web webpack打包配置文件*/
const path = require('path');
const webpack = require('webpack');
/** __dirname是node.js中的一个全局变量,它指向当前执行脚本所在的目录 */
const appDirectory = path.resolve(__dirname, '../');
/**
* Babel其实是一个编译JavaScript的平台
* 1、使用最新的JavaScript代码(ES6,ES7...)而不用管新标准是否被当前使用的浏览器完全支持
* 2、使用基于JavaScript进行了拓展的语言,比如React的JSX;
* */
const babelLoaderConfiguration = {
/** 正则表达式,编译所有.js文件 */
test: /.js$/,
/** 包含要编译的目录和文件 */
include: [
/** 根目录下的index.js */
path.resolve(appDirectory, 'index.js'),
/** 子目录src下所有文件 */
path.resolve(appDirectory, 'src'),
path.resolve(appDirectory, 'node_modules/react-native-uncompiled')
],
use: {
loader: 'babel-loader',
/** webpack会自动调用.babelrc里的babel配置选项 */
options: {
cacheDirectory: true,
// presets: ['react-native'],
// plugins: ['react-native-web']
}
}
};
const imageLoaderConfiguration = {
test: /.(gif|jpe?g|png|svg)$/,
use: {
/**
* file-loader解决路径问题,url-loader根据limit值对图片编码,生成dataURl
* url-loader内置了file-loader
* */
loader: 'url-loader',
options: {
name: '[name].[ext]'
}
}
};
module.exports = {
/** webpack4.x增加的选项,development/production */
mode: process.env.NODE_ENV || 'production',
/** 开发时调试源码,会影响编译速度,生产环境请注释该行 */
devtool: 'eval-source-map',
/** entry入口 */
entry: [
path.resolve(appDirectory, 'index.js'),
],
/** output出口 */
output: {
/** 打包后输出文件的文件名 */
filename: 'bundle.web.js',
/** 打包后的文件存放的地方 */
path: path.resolve(appDirectory, 'dist')
},
/**
* 通过使用不同的loader,webpack有能力调用外部的脚本或工具,实现对不同格式的文件的处理。
* 比如分析转换scss为css,或者把下一代的JS文件(ES6,ES7)转换为现代浏览器兼容的JS文件,
* 对React的开发而言,合适的Loaders可以把React的中用到的JSX文件转换为JS文件。
* loader配置选项参数说明:
* test:一个用以匹配loaders所处理文件的拓展名的正则表达式(必须)
* loader:loader的名称(必须)
* include/exclude:手动添加必须处理的文件(文件夹)或屏蔽不需要处理的文件(可选)
* query:为loaders提供额外的设置选项(可选)
* */
module: {
rules: [
babelLoaderConfiguration,
imageLoaderConfiguration
]
},
/**
* resolve配置模块如何解析
* */
resolve: {
alias: {
'react-native$': 'react-native-web'
},
/** 自动解析确定的扩展 */
extensions: ['.web.js', '.js'],
/** 告诉webpack解析模块时应搜索的目录 */
modules: ['node_modules']
},
/**
* 使用webpack构建本地服务器
* npm install --save-dev webpack-dev-server
* yarn add -D webpack-dev-server
* http://localhost:8080
* */
devServer: {
/** 本地服务器所加载的页面所在的目录 */
contentBase: "./dist",
/** true所有的跳转将指向index.html */
historyApiFallback: true,
/** 当源文件改变时实时刷新 */
inline: true
}
};

web/index.html

<!DOCTYPE html>
<html lang="en" style="height:100%">
<head>
<meta charset="UTF-8">
<title>React Native Web In Superbuy App</title>
<meta name="viewport" content="initial-scale=1.0,width=device-width">
<style>
html, body { height: 100%; width: 100%; overflow: hidden; }
.react-app { height: 100%; overflow: hidden; }
</style>
</head>
<body style="height:100%">
<div id="react-app" style="display:flex;height:100%"></div>
<script src="./bundle.web.js"></script>
</body>
</html>

index.js

import {AppRegistry, Platform} from 'react-native';
import App from './src/App';
import {name as appName} from './app.json';
// register the app
AppRegistry.registerComponent(appName, () => App);
if (Platform.OS === 'web') {
AppRegistry.runApplication(appName, {
initialProps: {},
rootTag: document.getElementById('react-app')
});
}

免责声明:文章转载自《React Native for Web配置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL语句-create语句【性能测试】:JVM内存监控策略的方法,以及监控结果说明下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

小窥React360——用React创建360全景VR体验

前言    混迹VR届的发烧友兼开发者们一定不要错过这款FaceBook推出的跨端VR开发框架——React360,称为360全景体验框架更为准确,因为其前身是FaceBook和Oculus2017年发布的一个叫作“Racet VR”的JS库,用来在web端创建3D和VR体验。后来Oculus使用该框架的原生C++版本构建自己部分应用,随着时间推移,由于要...

koa和egg项目webpack热更新实现

背景 在用Node.js+Webpack构建的方式进行开发时, 我们希望能实现修改代码能实时刷新页面UI的效果. 这个特性webpack本身是支持的, 而且基于koa也有现成的koa-webpack-hot-middleware 和 koa-webpack-dev-middleware 封装好的组件支持. 不过这里如果需要支持Node.js服务器端修改代码...

react 使用 eslint 的三种代码检查方案总结,多了解点--让代码更完美....

  1、介绍     ESLint 是一个可扩展,每条规则独立,被设计为完全可配置的lint工具。     可以用来检测代码,避免低级错误     可以用来规范代码的开发风格,统一代码习惯。 2、为什么使用 ESLint ?     统一代码规范 :     在开发中,可能会遇到很多不同的同事同时开发一个项目 ,或者在工作的调整中,会有接手一个项目,  ...

react 的一个插件

Reactjs code snippets (vs code 编辑器里面的一个插件 支持 react 得简写) rcc 和 rfc 可以快速生成react代码 下面网址是个react文档: https://materialui-ch.gitbooks.io/material-ui_doc_chinese/content/fu-wu-qi-xuan-ran....

Vue2+VueRouter2+webpack 构建项目实战(二):目录以及文件结构

通过上一篇博文《Vue2+VueRouter2+webpack 构建项目实战(一):准备工作》,我们已经新建好了一个基于vue+webpack的项目。本篇文章详细介绍下项目的结构。 项目目录以及文件结构 如图所示: 如上图所示,自动构建的vue项目的结构就是这样。 目录/文件 说明 build 这个是我们最终发布的时候会把代码发布在这里,在开发...

关于webpack模块打包工具

一、与webpack类似的工具有那些?为什么最终选择webpack?  打包工具: webpack rollup parcel  理由: webpack适用于大型复杂的前端站点构建 rollup适用于基础库的打包,如vue、react parcel适用于简单的实验性项目,他可以满足低门槛的快速看到效果。     由于parcel在打包过程中给出的调...