1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-27 10:32:58 +02:00
joplin/packages/app-mobile/metro.config.js

94 lines
3.2 KiB
JavaScript
Raw Normal View History

// Metro configuration for React Native
// https://github.com/facebook/react-native
2020-11-05 18:58:23 +02:00
// The technique below to get the symlinked packages to work with the Metro
// bundler comes from this comment:
//
// https://github.com/facebook/metro/issues/1#issuecomment-501143843
//
// Perhaps also investigate this technique as it's specifically for Lerna:
//
// https://github.com/facebook/metro/issues/1#issuecomment-511228599
const path = require('path');
const { getDefaultConfig } = require('metro-config');
2020-11-05 18:58:23 +02:00
const localPackages = {
'@joplin/lib': path.resolve(__dirname, '../lib/'),
'@joplin/renderer': path.resolve(__dirname, '../renderer/'),
'@joplin/turndown': path.resolve(__dirname, '../turndown/'),
'@joplin/turndown-plugin-gfm': path.resolve(__dirname, '../turndown-plugin-gfm/'),
'@joplin/editor': path.resolve(__dirname, '../editor/'),
'@joplin/tools': path.resolve(__dirname, '../tools/'),
2023-07-28 12:31:59 +02:00
'@joplin/utils': path.resolve(__dirname, '../utils/'),
'@joplin/fork-htmlparser2': path.resolve(__dirname, '../fork-htmlparser2/'),
'@joplin/fork-uslug': path.resolve(__dirname, '../fork-uslug/'),
'@joplin/react-native-saf-x': path.resolve(__dirname, '../react-native-saf-x/'),
'@joplin/react-native-alarm-notification': path.resolve(__dirname, '../react-native-alarm-notification/'),
2023-07-18 15:58:06 +02:00
'@joplin/fork-sax': path.resolve(__dirname, '../fork-sax/'),
};
const remappedPackages = {
...localPackages,
};
2023-07-18 15:58:06 +02:00
// Some packages aren't available in react-native and thus must be replaced by browserified
// versions. For example, this allows us to `import {resolve} from 'path'` rather than
// `const { resolve } = require('path-browserify')` ('path-browerify' doesn't have its own type
// definitions).
const browserifiedPackages = ['path'];
for (const package of browserifiedPackages) {
remappedPackages[package] = path.resolve(__dirname, `./node_modules/${package}-browserify/`);
}
const watchedFolders = [];
for (const [, v] of Object.entries(localPackages)) {
watchedFolders.push(v);
}
const defaultConfig = getDefaultConfig.getDefaultValues(__dirname);
2020-11-05 18:58:23 +02:00
module.exports = {
transformer: {
getTransformOptions: async () => ({
transform: {
experimentalImportSupport: false,
2021-08-09 22:45:41 +02:00
inlineRequires: true,
2020-11-05 18:58:23 +02:00
},
}),
},
resolver: {
assetExts: [
...defaultConfig.resolver.assetExts,
// Allow loading .jpl plugin files
'jpl',
],
// This configuration allows you to build React-Native modules and test
// them without having to publish the module. Any exports provided by
// your source should be added to the "target" parameter. Any import not
// matched by a key in target will have to be located in the embedded
// app's node_modules directory.
2020-11-05 18:58:23 +02:00
//
extraNodeModules: new Proxy(
// The first argument to the Proxy constructor is passed as "target"
// to the "get" method below. Put the names of the libraries
// included in your reusable module as they would be imported when
// the module is actually used.
2020-11-05 18:58:23 +02:00
//
2023-07-18 15:58:06 +02:00
remappedPackages,
2020-11-05 18:58:23 +02:00
{
get: (target, name) => {
if (target.hasOwnProperty(name)) {
return target[name];
}
return path.join(process.cwd(), `node_modules/${name}`);
},
},
2020-11-05 18:58:23 +02:00
),
},
projectRoot: path.resolve(__dirname),
watchFolders: watchedFolders,
2020-11-05 18:58:23 +02:00
};