Skip to content
Snippets Groups Projects
app.config.react.js 2.29 KiB
Newer Older
  • Learn to ignore specific revisions
  • Hugo NOUTS's avatar
    Hugo NOUTS committed
    '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')
    
    Hugo NOUTS's avatar
    Hugo NOUTS committed
    const { useHotReload } = require('cozy-scripts/config/webpack.vars')
    
    const CopyPlugin = require('copy-webpack-plugin')
    
    Hugo NOUTS's avatar
    Hugo NOUTS committed
    const CTS = require('cozy-scripts/utils/constants.js')
    const babelConf = require('./babel.config')
    
    process.env[CTS.ENTRY_EXT] = '.tsx' // Replaces .jsx
    
    module.exports = {
      resolve: {
        extensions: ['.jsx', '.tsx', '.ts', '.scss'], // Add TS extensions
      },
      module: {
        rules: [
          {
            test: /\.(ts|js)x?$/, // Add TS extensions
    
            exclude: /node_modules(\/|\\)(?!(cozy-ui))/,
    
    Hugo NOUTS's avatar
    Hugo NOUTS committed
            loader: require.resolve('cozy-scripts/node_modules/babel-loader'), // Add full path
            options: {
              cacheDirectory: 'node_modules/.cache/babel-loader/react',
              presets: babelConf.presets,
              plugins: useHotReload ? babelConf.plugins : [],
            },
          },
    
          {
            test: /\.hbs$/,
            loader: 'handlebars-loader',
          },
          {
            test: path.resolve(__dirname, 'node_modules/uglify-js/tools/node.js'),
            loader: 'null-loader',
          },
    
    Hugo NOUTS's avatar
    Hugo NOUTS committed
          {
            test: /\.scss$/,
    
            use: ['style-loader', 'css-loader', 'sass-loader'],
    
    Hugo NOUTS's avatar
    Hugo NOUTS committed
          },
        ],
      },
      // Necessary for cozy-ui during Preact -> React apps transition
      plugins: [
    
        new CopyPlugin({
          patterns: [
            {
              from: './src/assets/icons/visu/ecogesture',
              to: './assets/ecogesture',
            },
            {
              from: './src/assets/icons/email',
              to: './assets/',
            },
    
            {
              from: `./src/targets/vendor/assets/icon.svg`,
              to: 'public/',
            },
            {
              from: `./src/targets/vendor/assets/favicon*`,
              to: 'public/',
              flatten: true,
            },
            {
              from: `./src/targets/vendor/assets/apple-touch-icon.png`,
              to: 'public/apple-touch-icon.png',
            },
            {
              from: `./src/targets/vendor/assets/safari-pinned-tab.svg`,
              to: 'public/safari-pinned-tab.svg',
            },
    
    Hugo NOUTS's avatar
    Hugo NOUTS committed
        new webpack.DefinePlugin({
          'process.env': {
            USE_REACT: 'true',
          },
        }),
      ],
    }