postcss/postcss-cli

Skip file write if file content isn't changed

Closed this issue · 2 comments

If the input is the same as the output CSS and the --replace flag is passed, the file is always overridden. Can we somehow prevent this from happening?

The issue I have now is that I have another watcher on these files which detect file changes even if the content is not changed.

postcss-cli/index.js

Lines 222 to 227 in 42fc85e

tasks.push(fs.outputFile(options.to, result.css))
if (result.map) {
const mapfile = getMapfile(options)
tasks.push(fs.outputFile(mapfile, result.map))
}

We could wrap these lines with a simple check to prevent the file write from happening:

if (result.css !== css.toString('utf8')) {
  tasks.push(fs.outputFile(options.to, result.css))

  if (result.map) {
    const mapfile = getMapfile(options)
    tasks.push(fs.outputFile(mapfile, result.map))
  }
}

Not sure if we can better add a new option or do this check by default, what do you think?

Don't see a good reason not to do this by default; PR welcome.

@MartijnCuppens, I've opened #417 which solves this in a more general way. If I'm not mistaken, what you were asking for is:

if the input is the same as the output then don't save the file

What I built is:

if the output is the same as what's currently in the output then don't save the file.

I think what I have in #417 satisfies what you're looking for and solves a significant annoyance for me at the same time :)