Почему Sharp выводит один и тот же файл, хотя я изменил входной файл?

После масштабирования и раскрашивания JPG с помощью Sharp я сразу же удаляю входной файл. Когда я загружаю новый файл с тем же именем, Sharp выводит старый файл. Я использую NodeJS на Ubuntu 16.04.

Вот код для редактирования файла:

sampleFile.mv(__dirname + "/" + name + "." + ext, function(err) {
    if (err)
      return res.status(500).send(err);

    res.send('File uploaded!');

    if (ext != "xlsx") {
      // This will attempt to resize the images
      console.info("Sharpening image")
      sharp(__dirname + "/" + name + "." + ext).resize({ height: 27 }).flatten( { background: '#ffffff' } ).toFile("/var/www/my_ip/file.jpg")
        .then(function(newFileInfo) {
          // newFileInfo holds the output file properties
          console.info("Success")
          try {
            fileSystem.unlinkSync(__dirname + "/" + name + "." + ext)
            //file removed
          } catch(err) {
            console.error(err)
          }
          })
        .catch(function(err) {
          console.info("Error occured with file " + name + "." + ext + " | Dir: " + __dirname);
          console.info(err)
          try {
          fileSystem.unlinkSync(__dirname + "/" + name + "." + ext)
            //file removed
          } catch(err) {
            console.error(err)
          }
          //})
        }); //this line errored
    }

  });

При первом запуске он работает так, как задумано, однако, если файл, который я использую для второго запуска, имеет то же имя, что и исходный файл, он каким-то образом запомнит старый файл и вместо этого выведет его. Я не уверен, как он запоминает этот файл, так как я сразу же удаляю его. Есть какие нибудь идеи как это починить?

Обновлено: чтобы убедиться, что проблема не связана с тем, что первый файл не был правильно удален, я провел быстрый тест. Во-первых, я использую сервер для редактирования 1 файла и получаю этот отредактированный файл в качестве вывода, как и ожидалось. Теперь, вместо того, чтобы снова редактировать новый файл с тем же именем, я перезапустил сервер, затем отредактировал новый файл с тем же именем. Теперь он правильно выводит новый файл. Я считаю, что у NPM должен быть какой-то кеш, о котором я не знаю, в настоящее время читаю документы, чтобы убедиться, что моя теория верна.

🤔 А знаете ли вы, что...
Синтаксис JavaScript схож с синтаксисом языка программирования Java, но они не связаны.


2
1 404
1

Ответ:

Решено

Да, моя теория была верна! У Sharp есть кеш, и по какой-то причине ранее отредактированные файлы остаются открытыми. Вероятно, это хорошо для оптимизации, но если у вас те же проблемы, что и у меня, и вы не беспокоитесь об оптимизации, вы можете включить кеш следующим образом:

sharp.cache(false);