Get Web compiling for expo
This commit is contained in:
+2
-12
@@ -1,14 +1,4 @@
|
|||||||
// index.web.js
|
|
||||||
|
|
||||||
import 'platform/polyfills'
|
import 'platform/polyfills'
|
||||||
import {AppRegistry} from 'react-native'
|
import {registerRootComponent} from 'expo'
|
||||||
import App from './src/App'
|
import App from './src/App'
|
||||||
import {name as appName} from './src/app.json'
|
registerRootComponent(App)
|
||||||
|
|
||||||
// register the app
|
|
||||||
AppRegistry.registerComponent(appName, () => App)
|
|
||||||
|
|
||||||
AppRegistry.runApplication(appName, {
|
|
||||||
initialProps: {},
|
|
||||||
rootTag: document.getElementById('app-root'),
|
|
||||||
})
|
|
||||||
|
|||||||
@@ -1,121 +0,0 @@
|
|||||||
const path = require('path')
|
|
||||||
const HtmlWebpackPlugin = require('html-webpack-plugin')
|
|
||||||
const webpackEnv = process.env.NODE_ENV || 'development'
|
|
||||||
|
|
||||||
const appDirectory = path.resolve(__dirname, '../')
|
|
||||||
|
|
||||||
// NOTE: node modules that ship as typescript must be listed here
|
|
||||||
const uncompiled_deps = [
|
|
||||||
'@bam.tech/react-native-image-resizer',
|
|
||||||
'react-native-fs',
|
|
||||||
'rn-fetch-blob',
|
|
||||||
'react-native-root-siblings',
|
|
||||||
'react-native-linear-gradient',
|
|
||||||
]
|
|
||||||
|
|
||||||
const babelLoaderConfiguration = {
|
|
||||||
test: /\.(js|jsx|ts|tsx)$/,
|
|
||||||
include: [
|
|
||||||
path.resolve(appDirectory, 'index.web.js'),
|
|
||||||
path.resolve(appDirectory, 'src'),
|
|
||||||
...uncompiled_deps.map(dep =>
|
|
||||||
path.resolve(appDirectory, `node_modules/${dep}`),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
use: {
|
|
||||||
loader: 'babel-loader',
|
|
||||||
options: {
|
|
||||||
cacheDirectory: true,
|
|
||||||
presets: ['module:metro-react-native-babel-preset'],
|
|
||||||
plugins: ['react-native-web'],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
const imageLoaderConfiguration = {
|
|
||||||
test: /\.(gif|jpe?g|png|svg)$/,
|
|
||||||
use: {
|
|
||||||
loader: 'url-loader',
|
|
||||||
options: {
|
|
||||||
name: '[name].[ext]',
|
|
||||||
esModule: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
const reactNativeWebWebviewConfiguration = {
|
|
||||||
test: /postMock.html$/,
|
|
||||||
use: {
|
|
||||||
loader: 'file-loader',
|
|
||||||
options: {
|
|
||||||
name: '[name].[ext]',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
mode: webpackEnv,
|
|
||||||
|
|
||||||
entry: [
|
|
||||||
// NOTE: load any web API polyfills needed here
|
|
||||||
path.resolve(appDirectory, 'index.web.js'),
|
|
||||||
],
|
|
||||||
|
|
||||||
output: {
|
|
||||||
filename: 'bundle.web.js',
|
|
||||||
path: path.resolve(appDirectory, 'dist'),
|
|
||||||
},
|
|
||||||
|
|
||||||
plugins: [
|
|
||||||
new HtmlWebpackPlugin({
|
|
||||||
template: path.join(appDirectory, './public/index.html'),
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
|
|
||||||
module: {
|
|
||||||
rules: [
|
|
||||||
babelLoaderConfiguration,
|
|
||||||
imageLoaderConfiguration,
|
|
||||||
reactNativeWebWebviewConfiguration,
|
|
||||||
],
|
|
||||||
},
|
|
||||||
|
|
||||||
devServer: {
|
|
||||||
historyApiFallback: {
|
|
||||||
rewrites: [
|
|
||||||
{from: /.*\/bundle.web.js/, to: '/bundle.web.js'},
|
|
||||||
{
|
|
||||||
from: /.*^\/(.*.hot-update.json)$/,
|
|
||||||
to: function (context) {
|
|
||||||
return '/' + context.parsedUrl.pathname.split('/').pop()
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
from: /.*^\/(.*.hot-update.js)$/,
|
|
||||||
to: function (context) {
|
|
||||||
return '/' + context.parsedUrl.pathname.split('/').pop()
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{from: /.*/, to: '/index.html'},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
resolve: {
|
|
||||||
alias: {
|
|
||||||
'react-native$': 'react-native-web',
|
|
||||||
'react-native-linear-gradient': 'react-native-web-linear-gradient',
|
|
||||||
'react-native-webview': 'react-native-web-webview',
|
|
||||||
},
|
|
||||||
extensions: [
|
|
||||||
'.web.tsx',
|
|
||||||
'.web.ts',
|
|
||||||
'.tsx',
|
|
||||||
'.ts',
|
|
||||||
'.web.jsx',
|
|
||||||
'.web.js',
|
|
||||||
'.jsx',
|
|
||||||
'.js',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
const createExpoWebpackConfigAsync = require('@expo/webpack-config')
|
||||||
|
const {withAlias} = require('@expo/webpack-config/addons')
|
||||||
|
|
||||||
|
const reactNativeWebWebviewConfiguration = {
|
||||||
|
test: /postMock.html$/,
|
||||||
|
use: {
|
||||||
|
loader: 'file-loader',
|
||||||
|
options: {
|
||||||
|
name: '[name].[ext]',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = async function (env, argv) {
|
||||||
|
let config = await createExpoWebpackConfigAsync(env, argv)
|
||||||
|
config = withAlias(config, {
|
||||||
|
'react-native$': 'react-native-web',
|
||||||
|
'react-native-linear-gradient': 'react-native-web-linear-gradient',
|
||||||
|
'react-native-webview': 'react-native-web-webview',
|
||||||
|
})
|
||||||
|
config.module.rules = [
|
||||||
|
...(config.module.rules || []),
|
||||||
|
reactNativeWebWebviewConfiguration,
|
||||||
|
]
|
||||||
|
return config
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user