'rails/webpacker module build fail issue from ./node_modules/mini-css-extract-plugin/dist/loader.js

I have upgraded @rails/webpacker from v4 to v5 (5.72.1, to be precise). While upgrading, I got following issue

ERROR in ./node_modules/croppie/croppie.css Module build failed (from ./node_modules/@rails/webpacker/node_modules/mini-css-extract-plugin/dist/loader.js): TypeError: Cannot read property 'tap' of undefined

This is how I have setup my webpack config

const { environment } = require('@rails/webpacker');
const vue = require('./loaders/vue');
const webpack = require('webpack');
const VueLoaderPlugin = require('vue-loader/lib/plugin');
const TerserPlugin = require('terser-webpack-plugin');
const path = require('path');

const customConfig = {
  resolve: {
    fallback: {
      dgram: false,
      fs: false,
      net: false,
      tls: false,
      child_process: false,
    },
  },
  entry: {
    vendor: ['babel-polyfill', 'vue', 'moment', 'axios'],
  },
};

environment.splitChunks((config) => {
  console.log('config', environment);
  return {
    ...config,
    ...{
      optimization: {
        splitChunks: { chunks: 'all', name: '~' },
        runtimeChunk: true,
      },
    },
  };
});


environment.config.delete('node.dgram');
environment.config.delete('node.fs');
environment.config.delete('node.net');
environment.config.delete('node.tls');
environment.config.delete('node.child_process');

environment.config.merge(customConfig);

environment.plugins.append('VueLoaderPlugin', new VueLoaderPlugin());
environment.loaders.append('vue', {
  test: /\.vue$/,
  loader: 'vue-loader',
});

// Comment this if you need case-sensitive-paths-plugin in local development.
if (process.env.RAILS_ENV === 'development') {
  environment.plugins.delete('CaseSensitivePaths');

  // Only add en.js locale for local development.
  environment.plugins.append('moment', new webpack.ContextReplacementPlugin(/moment[/\\]locale/, /(en).js/));
}

environment.plugins.prepend('Environment', new webpack.EnvironmentPlugin(JSON.parse(JSON.stringify(process.env))));
environment.plugins.prepend(
  'Provide',
  new webpack.ProvidePlugin({
    $: 'jquery',
    jQuery: 'jquery',
    jquery: 'jquery',
  })
);

const config = environment.toWebpackConfig();

config.resolve.alias = {
  jquery: 'jquery/src/jquery',
};

let sassLoader = environment.loaders.get('sass').use.find(item => item.loader === 'sass-loader')
sassLoader = {
  ...sassLoader,
  options: {
    ...sassLoader.options,
    sassOptions: {
      ...sassLoader.options.sassOptions,
      includePaths: ["./node_modules"],
    }
  }
}

let miniCssExtractPlugin = environment.plugins.get('MiniCssExtract')
console.log('miniCssExtractPlugin', miniCssExtractPlugin)

environment.loaders.append('vue', vue);

environment.config.merge({
  optimization: {
    minimize: false,
    minimizer: [
      new TerserPlugin({
        test: /\.js(\?.*)?$/i,
      }),
    ],
  },
  resolve: {
    alias: {
      app: path.resolve(__dirname, '../../app/'),
    },
  },
});

module.exports = environment

This is the logs

enter image description here

If I comment import 'croppie/croppie.css' in the js file where it is used, the error goes away where croppie is a third party library.

Not sure if this issue is only while importing third party css file.



Solution 1:[1]

You using custom Fn Lamda that can customize is correct, I also doing by

  1. Using Lamda Callback the answer will see as in below you can trails for each layer when using name.
[<KerasTensor: shape=(None, 1, 32, 32, 3) dtype=float32 (created by layer 'input_1')>]

<keras.engine.functional.Functional object at 0x0000016DB5CC51C0>

  1. Lamda Fn as you do the same way you have the same answer
 [<KerasTensor: shape=(None, 1, 32, 32, 3) dtype=float32 (created by layer 'input_1')>]
<keras.engine.functional.Functional object at 0x0000016DB5CC51C0>
  1. You also can do by model properties when you using sequential
model = tf.keras.models.Sequential([                    
tf.keras.layers.InputLayer(input_shape=(1, 32, 32, 3)), ...         
])

And more you can do with array and sequence properties ...

Simple mapping target encoding Simple mapping target encoding

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Jirayu Kaewprateep