diff options
author | Paul Frazee <pfrazee@gmail.com> | 2023-01-26 12:12:27 -0600 |
---|---|---|
committer | Paul Frazee <pfrazee@gmail.com> | 2023-01-26 12:12:27 -0600 |
commit | d6ec627c8cd32836e5ed494606318959ca17fca1 (patch) | |
tree | 90de43466e097263730e4f248584f68135bcc947 /web | |
parent | 7e3f6f030680a8cf7b5baa3ce6f33acd5766fca8 (diff) | |
download | voidsky-d6ec627c8cd32836e5ed494606318959ca17fca1.tar.zst |
Update web build and web-specific components; RNW now builds
Diffstat (limited to 'web')
-rw-r--r-- | web/webpack.config.js | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/web/webpack.config.js b/web/webpack.config.js new file mode 100644 index 000000000..222703968 --- /dev/null +++ b/web/webpack.config.js @@ -0,0 +1,85 @@ +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-toast', + '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, + }, + }, +} + +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], + }, + + resolve: { + alias: { + 'react-native$': 'react-native-web', + }, + extensions: [ + '.web.tsx', + '.web.ts', + '.tsx', + '.ts', + '.web.jsx', + '.web.js', + '.jsx', + '.js', + ], + }, +} |