jakejs / jake

JavaScript build tool, similar to Make or Rake. Built to work with Node.js.
http://jakejs.com
Apache License 2.0
1.96k stars 190 forks source link

File task dependency handling buggy #423

Closed martinholters closed 1 year ago

martinholters commented 1 year ago

MWE:

const fs = require('fs');
const { directory, file } = require('jake');

directory('build');

file('build/output1.txt', ['build'], () => {
  console.log('writing build/output1.txt');
  fs.writeFileSync('build/output1.txt', 'Contents of build/output1.txt');
});

file('build/output2a.txt', ['build/output1.txt'], () => {
  console.log('writing build/output2a.txt');
  fs.writeFileSync('build/output2a.txt', 'Contents of build/output2a.txt');
});

file('build/output2b.txt', ['build/output1.txt'], () => {
  console.log('writing build/output2b.txt');
  fs.writeFileSync('build/output2b.txt', 'Contents of build/output2b.txt');
});

file('build/output3.txt', [ 'build/output2a.txt', 'build/output2b.txt'], () => {
  console.log('writing build/output3.txt');
  fs.writeFileSync('build/output3.txt', 'Contents of build/output3.txt');
});

Starting from a state where build/output1.txt (or build entirely) is missing, everything is built with jake build/output3.txt as desired. But if only build/output2b.txt or build/output3.txt are missing, nothing gets rebuild. Yes, jake build/output3.txt does not even build build/output3.txt. If build/output1.txt is touched, only build/output2a.txt is rebuilt by jake build/output3.txt. No errors are shown for any of these cases.

This might be a duplicate of #388, but that has a rather vague description, so I'm not sure. If it is, this MWE might be a starting point for a test case for #387.