Skip to content

Double compilation when used with webpack serve  #537

@JeremyTCD

Description

@JeremyTCD

System

  • Operating System: Windows 10

  • Node Version: v12.18.3

  • NPM Version: 6.14.6

  • webpack Version: 5.1.0

  • copy-webpack-plugin Version: 6.2.1

  • Yarn version: 1.12.3

  • webpack-dev-server version: 3.11.0

Expected Behavior

The following command:

yarn run webpack serve

should cause a single initial compilation.

Actual Behavior

Two initial compilations occur when using copy-webpack-plugin to copy from directories with no files as direct children. E.g.:

- assets
  - moreAssets
     - asset.txt

Here assets has no files as direct children. assets contains a single directory, moreAssets which in turn contains a file.

Code

Complete reproduction can be found here: reproduction repository.

webpack.config.js:

const path = require('path');
const CopyWebpackPlugin = require('copy-webpack-plugin');

module.exports = {
    plugins: [
        new CopyWebpackPlugin({
            patterns: [{
                from: path.resolve(__dirname, 'assets', '**', '*').replace(/\\/g, '/'),
                to: path.resolve(__dirname, 'dist').replace(/\\/g, '/'),
            }]
        })
    ]
};

How Do We Reproduce?

Clone the repro, install dependencies and run webpack serve:

git clone https://github.com/JeremyTCD/double.compilation.repro.git
cd .\double.compilation.repro\
yarn install
yarn run webpack serve

Example output:

yarn run v1.12.3
$ C:\Users\Jeremy\Desktop\double.compilation.repro\node_modules\.bin\webpack serve
i 「wds」: Project is running at http://localhost:8080/
i 「wds」: webpack output is served from undefined
i 「wds」: Content not from webpack is served from C:\Users\Jeremy\Desktop\double.compilation.repro
i 「wdm」: asset main.js 146 KiB [emitted] [minimized] (name: main) 1 related asset
asset assets/moreAssets/dummyAsset.txt 4 bytes [emitted] [copied]
runtime modules 430 bytes 3 modules
cacheable modules 330 KiB
  modules by path ./node_modules/webpack-dev-server/ 21.2 KiB
    modules by path ./node_modules/webpack-dev-server/client/ 20.9 KiB 10 modules
    modules by path ./node_modules/webpack-dev-server/node_modules/ 296 bytes 2 modules
  modules by path ./node_modules/html-entities/lib/*.js 57.9 KiB 4 modules
  modules by path ./node_modules/url/ 37.4 KiB 3 modules
  modules by path ./node_modules/querystring/*.js 4.51 KiB
    ./node_modules/querystring/index.js 127 bytes [built] [code generated]
    ./node_modules/querystring/decode.js 2.34 KiB [built] [code generated]
    ./node_modules/querystring/encode.js 2.04 KiB [built] [code generated]
  modules by path ./node_modules/webpack/hot/*.js 1.42 KiB
    ./node_modules/webpack/hot/emitter.js 75 bytes [built] [code generated]
    ./node_modules/webpack/hot/log.js 1.34 KiB [built] [code generated]
./node_modules/webpack/hot/ sync nonrecursive ^\.\/log$ 170 bytes [built] [code generated]
webpack 5.1.0 compiled successfully in 2442 ms
i 「wdm」: Compiled successfully.

i 「wdm」: Compiling...
i 「wdm」: asset main.js 146 KiB [emitted] [minimized] (name: main) 1 related asset
asset assets/moreAssets/dummyAsset.txt 4 bytes [emitted] [copied]
runtime modules 430 bytes 3 modules
cacheable modules 330 KiB
  modules by path ./node_modules/webpack-dev-server/ 21.2 KiB
    modules by path ./node_modules/webpack-dev-server/client/ 20.9 KiB 10 modules
    modules by path ./node_modules/webpack-dev-server/node_modules/ 296 bytes 2 modules
  modules by path ./node_modules/html-entities/lib/*.js 57.9 KiB 4 modules
  modules by path ./node_modules/url/ 37.4 KiB 3 modules
  modules by path ./node_modules/querystring/*.js 4.51 KiB
    ./node_modules/querystring/index.js 127 bytes [built] [code generated]
    ./node_modules/querystring/decode.js 2.34 KiB [built] [code generated]
    ./node_modules/querystring/encode.js 2.04 KiB [built] [code generated]
  modules by path ./node_modules/webpack/hot/*.js 1.42 KiB
    ./node_modules/webpack/hot/emitter.js 75 bytes [built] [code generated]
    ./node_modules/webpack/hot/log.js 1.34 KiB [built] [code generated]
./node_modules/webpack/hot/ sync nonrecursive ^\.\/log$ 170 bytes [built] [code generated]
webpack 5.1.0 compiled successfully in 2301 ms
i 「wdm」: Compiled successfully.

I've added a line between the compilations above. The redundant compilation always occurs immediately after the first.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions