webpack / tapable

Just a little module for plugins.
MIT License
3.71k stars 393 forks source link

DeprecationWarning: Tapable.plugin is deprecated. Use new API on `.hooks` instead #143

Closed adityashukla74 closed 3 years ago

adityashukla74 commented 3 years ago

I am trying to upgrade my Webpack 4 to Webpack5. (Earlier it was Webpack2)

On running node --trace-deprecation node_modules/webpack/bin/webpack.js I get

(node:30954) DeprecationWarning: Tapable.plugin is deprecated. Use new API on .hooks instead at DecompressPlugin.apply (/Users/adityashukla/projects/userInterface/source-catalog-web/plugins/DecompressPlugin.js:16:18) at webpack (/Users/adityashukla/projects/userInterface/source-catalog-web/node_modules/webpack/lib/webpack.js:51:13)

My Plugin looks like this

const path = require('path'),
const path = require('path'),
    decompress = require('decompress'),
    crypto = require('crypto'),
    glob = require('glob');

class DecompressPlugin {
    constructor(dist) {
        if (!dist) {
            throw new Error('dist is a required option');
        }

        this.dist = dist;
    }

    apply(compiler) {
        compiler.plugin('emit', (compilation, done) => {
            const files = glob.sync('**/*.decompress.tar.bz2', {'cwd': 'src'}),
                hash = crypto.createHash('sha256').update(JSON.stringify(files.sort()), 'utf8').digest('hex');

            if (this.hash !== hash) {
                this.hash = hash;

                files.forEach((f) => {
                    const folder = path.dirname(f).split(path.sep),
                        parts = [this.dist].concat(folder.slice(1)),
                        destination = parts.join(path.sep);

                    decompress(path.join('src', f), destination).then(() => {
                        done();
                    });
                });
            } else {
                done();
            }
        });
    }
}

module.exports = DecompressPlugin;

How can i resolve this ?

alexander-akait commented 3 years ago

compiler.plugin was deprecated, please read error message and use compiler.hook.emit, but you should not use compiler.hook.emit hook for assets emiting, please use compilation.hooks.additionalAssets, example https://github.com/webpack-contrib/copy-webpack-plugin/blob/master/src/index.js#L393

alexander-akait commented 3 years ago

You even don't need this plugin, you can use copy-webpack-plugin and the transform option