nx/packages/expo/plugins/with-nx-webpack.ts

51 lines
1.2 KiB
TypeScript

import { TsconfigPathsPlugin } from 'tsconfig-paths-webpack-plugin';
import { resolve } from 'path';
/**
* @deprecated TODO(v17) use bundler: 'metro' instead, will be removed in 16.0.0
* This function add additional rules to expo's webpack config to make expo web working
*/
export async function withNxWebpack(config) {
// add additional rule to load files under libs
const rules = config.module.rules[1]?.oneOf;
if (rules) {
rules.push({
test: /\.(mjs|[jt]sx?)$/,
exclude: /node_modules/,
use: {
loader: require.resolve('@nx/webpack/src/utils/web-babel-loader.js'),
options: {
presets: [
[
'@nx/react/babel',
{
runtime: 'automatic',
},
],
],
},
},
});
}
if (!config.resolve) {
config.resolve = {};
}
if (!config.resolve.plugins) {
config.resolve.plugins = [];
}
const extensions = ['.ts', '.tsx', '.mjs', '.js', '.jsx'];
const tsConfigPath = resolve('tsconfig.json');
config.resolve.plugins.push(
new TsconfigPathsPlugin({
configFile: tsConfigPath,
extensions,
})
);
config.resolve.symlinks = true;
return config;
}