Skip to content
This repository was archived by the owner on Sep 7, 2026. It is now read-only.
This repository was archived by the owner on Sep 7, 2026. It is now read-only.

[Feature] keeping original whole or partial stats #35

Open

Description

@jskrzypek

We have cordova hooks in our source folder (see the cordova hooks guide for more info: https://cordova.apache.org/docs/en/dev/guide/appdev/hooks/) that need to be copied into our destination folder and need to preserve the executable bit on their file mode (i.e. ls -l should print -rwxr-xr-x for these files).

Currently this doesn't happen, but it seems like it should be easy to do by passing a options object as a 3rd parameter to the to the fs.writeFileAsync() call in the writeFilePromises with the stat.mode from the fs.statAsync() call.

Activity

  1. jskrzypek commented on Apr 19, 2016

    @jskrzypek
    Author

    I'm trying to implement this on my fork, but it doesn't seem to be working.

    I'm happy to make the PR but I need a bit of guidance.

  2. kevlened commented on Apr 28, 2016

    @kevlened
    Contributor

    The difficulty is in how we copy the files. By default, we add the files by adding them to compilation.assets and letting webpack take care of writing the files. The only time we write files with fs.writeFileAsync() is when a devServer is used (due to limitations of the server).

    It's possible that this feature could piggyback on the additions needed for #15. That feature also requires fs.writeFileAsync for every file.

  3. changed the title [-]Plugin is not copying file modes with execute permissions[/-] [+][Bug] Plugin is not copying file modes with execute permissions[/+] on Oct 5, 2017
  4. davepuchyr commented on Nov 28, 2017

    @davepuchyr

    @evilebottnawi This issue is a bug on linux and macOS, ie 2 out of 3 major operating systems. It would be nice if you recognized @michael-ciniawsky 's tags and this issue's importance. Node can't spawn()/exec()/etc a copied file while this bug exists.

  5. 2 remaining items

  6. michael-ciniawsky commented on Nov 28, 2017

    @michael-ciniawsky
    Contributor

    Maybe something in the direction of #119 would be sufficient enough/in the meantime

  7. socialcode-rob1 commented on Dec 5, 2017

    @socialcode-rob1

    To work around the issue, I've implemented this plugin https://github.com/GeKorm/webpack-permissions-plugin

    It executes during the 'done' phase in the webpack lifecycle.

  8. changed the title [-][Bug] Plugin is not copying file modes with execute permissions[/-] [+][Feature] Plugin is not copying file modes with execute permissions[/+] on Feb 15, 2019
  9. changed the title [-][Feature] Plugin is not copying file modes with execute permissions[/-] [+][Feature] Copy file permissions[/+] on Feb 18, 2019
  10. marco-a commented on May 18, 2019

    @marco-a

    Please make this happen. Great plugin but a pain in the ass to set the permissions afterwards ...

  11. changed the title [-][Feature] Copy file permissions[/-] [+][Feature] keeping original stats[/+] on Aug 31, 2020
  12. changed the title [-][Feature] keeping original stats[/-] [+][Feature] keeping original stats ()[/+] on Aug 31, 2020
  13. changed the title [-][Feature] keeping original stats ()[/-] [+][Feature] keeping original stats or partials[/+] on Aug 31, 2020
  14. changed the title [-][Feature] keeping original stats or partials[/-] [+][Feature] keeping original whole stats or partial[/+] on Aug 31, 2020
  15. changed the title [-][Feature] keeping original whole stats or partial[/-] [+][Feature] keeping original whole or partial stats[/+] on Aug 31, 2020
  16. benze commented on Oct 1, 2020

    @benze

    To work around the issue, I've implemented this plugin https://github.com/GeKorm/webpack-permissions-plugin

    It executes during the 'done' phase in the webpack lifecycle.

    @socialcode-rob1 How did you get the two to work in tandem? I've tried the webpack-permissions-plugin but it always seems to fire before the copy-webpack-plugin. I'm trying to get the webpack-permissions-plugin to fire after the copy-webpack-plugin has run such that the permissions are updated on the target files.

  17. ianpogi5 commented on Feb 19, 2021

    @ianpogi5

    Should this not be the default behavior of any copy functionality?

  18. matthewlamperski commented on Jan 28, 2023

    @matthewlamperski

    If anyone is still having this issue, like I was. I was able to create a very small plugin like this:

    const CopyPlugin = require('copy-webpack-plugin');
    const chmodr = require('chmodr')
    const path = require("path");
    
    class PermissionsPlugin {
      apply(compiler) {
        compiler.hooks.afterEmit.tap("PermissionsPlugin", () => {
          console.log("changing permissions", path.join(__dirname, './path/to/files'), __dirname)
          chmodr(path.join(__dirname, './path/to/files'), 0o755, err => {
            console.log("Error changing perms " + err)
          })
        })
      }
    }

    This will fire after all assets are copied over, and is working well for me. You also have to add it into your plugins like so:

    module.exports = {
      /* ... */
      plugins: [
        new PermissionsPlugin(),
        new CopyPlugin({
          options: {},
          /* ... */
        })
      ]
    };
  19. Michsior14 commented on Oct 1, 2025

    @Michsior14

    Late to the party, but as a workaround I've also created the plugin that should work on any file system that provides chmod (both fs and memfs do).

    https://github.com/Michsior14/permissions-webpack-plugin

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions