airbridge-react-native-sdk
Version:
Airbridge SDK for React Native
71 lines (63 loc) • 2 kB
JavaScript
let path = require('path');
let fs = require('fs');
let blacklist = require('metro-config/src/defaults/exclusionList');
const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config');
const { exec } = require('child_process');
let blacklists = [];
let dependencies = Object.keys(require('./../package.json').dependencies ?? {});
let modulesPath = path.resolve(__dirname, './../node_modules');
let modules = fs.readdirSync(modulesPath);
/* for avoid duplicate issue */
/* for blacklist library's devDependencies */
let text = '.*airbridge-react-native-sdk/node_modules/(';
for (let i=0; i<modules.length; i++) {
if (dependencies.indexOf(modules[i]) !== -1) {
continue;
}
text += (modules[i] + '|');
}
text = text.replace(/|$/, '');
text += ')/.*';
blacklists.push(new RegExp(text));
exec(path.resolve(__dirname, './../script/BuildSource.sh'))
/**
* Metro configuration
* https://reactnative.dev/docs/metro
*
* @type {import('metro-config').MetroConfig}
*/
const config = {
server: {
port: parseInt(process.env.RCT_METRO_PORT) || 9000,
},
transformer: {
getTransformOptions: async () => ({
transform: {
experimentalImportSupport: false,
inlineRequires: false
}
})
},
resolver: {
/* for get node_module in app from library */
extraNodeModules: new Proxy(
{},
{
get: (target, name) =>
{
if (target.hasOwnProperty(name))
{
return target[name];
}
return path.join(process.cwd(), `node_modules/${name}`);
}
}
),
blacklistRE: blacklist(blacklists),
},
projectRoot: path.resolve(__dirname),
watchFolders: [
path.resolve(__dirname, './../')
]
};
module.exports = mergeConfig(getDefaultConfig(__dirname), config);