From 7fa4a4382a9cbd7c3e91f7658d5b9bcb9c0f55d7 Mon Sep 17 00:00:00 2001 From: Yoan VALLET <ext.sopra.yvallet@grandlyon.com> Date: Fri, 31 Jul 2020 09:43:25 +0200 Subject: [PATCH] feat : Override the services config --- app.config.js | 3 +- app.config.services.js | 96 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 app.config.services.js diff --git a/app.config.js b/app.config.js index e358ccca9..965cbbb9f 100644 --- a/app.config.js +++ b/app.config.js @@ -28,7 +28,8 @@ const configs = [ require('cozy-scripts/config/webpack.config.manifest'), require('cozy-scripts/config/webpack.config.progress'), addAnalyzer ? require('cozy-scripts/config/webpack.config.analyzer') : null, - require('cozy-scripts/config/webpack.config.services'), + // require('cozy-scripts/config/webpack.config.services'), + require('./app.config.services'), // Override the services config require(`cozy-scripts/config/webpack.target.${target}`), ] diff --git a/app.config.services.js b/app.config.services.js new file mode 100644 index 000000000..eee12069b --- /dev/null +++ b/app.config.services.js @@ -0,0 +1,96 @@ +'use strict' + +'use strict' + +/** + * This file overrides the default react webpack config. + * This react config enables the use of TypeScript. + * + * @override node_modules/cozy-scripts/config/webpack.config.react.js + */ + +const webpack = require('webpack') +const path = require('path') +const fs = require('fs-extra') +const paths = require('cozy-scripts/utils/paths') +const { + eslintFix, + getFilename, + target, +} = require('cozy-scripts/config/webpack.vars') +const CTS = require('cozy-scripts/utils/constants.js') +const babelConf = require('./babel.config') + +process.env[CTS.ENTRY_EXT] = '.tsx' // Replaces .jsx + +const servicesFolder = paths.appServicesFolder() +const servicesPaths = fs.existsSync(servicesFolder) + ? fs.readdirSync(servicesFolder) + : [] + +const servicesEntries = {} +servicesPaths.forEach(file => { + if (!file.match(/^[^.]*.ts$/)) return + const filename = file.match(/^([^.]*).ts$/)[1] + servicesEntries[filename] = path.resolve(path.join(servicesFolder, file)) +}) + +const config = { + __mergeStrategy: { + smart: false, + strategy: { + plugins: 'replace', + output: 'replace', + entry: 'replace', + optimization: 'replace', + module: 'replace', + externals: 'replace', + }, + }, + entry: servicesEntries, + output: { + path: paths.appServicesBuild(), + filename: `${getFilename(false)}.js`, + }, + target: 'node', + optimization: {}, // reset optimization property + devtool: false, + externals: [], // reset externals property + module: { + rules: [ + { + enforce: 'pre', + test: /\.ts$/, + loader: require.resolve('cozy-scripts/node_modules/eslint-loader'), + exclude: /node_modules/, + options: { + extends: ['cozy-app'], + fix: eslintFix, + emitWarning: true, + }, + }, + { + test: /\.ts$/, + exclude: /(node_modules|cozy-(bar|client-js))/, + loader: require.resolve('cozy-scripts/node_modules/babel-loader'), + options: { + cacheDirectory: 'cozy-scripts/node_modules/.cache/babel-loader/node', + babelrc: false, + presets: [['cozy-app', { node: true, react: false }]], + }, + }, + ], + }, + plugins: [ + new webpack.DefinePlugin({ + __TARGET__: JSON.stringify('services'), + }), + ], +} + +/* We don't build services if no services and if on mobile build */ +const addServicesConfig = + target === 'browser' && Object.keys(servicesEntries).length + +// only for browser target (services are usable only on cozy-stack) +module.exports = addServicesConfig ? { multiple: { services: config } } : {} -- GitLab