Может ли скрипт nodeJs удалить свой собственный файл?

Я работаю над программой обновления и хочу, чтобы программа обновления могла обновлять себя (удалить и скопировать новый файл, из которого запускается скрипт).

  • Является ли это возможным?
  • Это хорошая практика?
  • У вас есть совет для такой ситуации?

Конечно, ничто не мешает вам удалить исходный файл, поскольку после того, как он потребуется в модуле, он не будет снова прочитан с диска (если только вы не сделаете недействительным кеш, но это хак). Это плохая практика? В общем, возможно, но звучит разумно для вашего варианта использования.

Jake Holzinger 12.06.2019 23:38

Самообновляющиеся модули, особенно в контексте менеджера пакетов, такого как npm, раздражают меня неправильно, потому что они нарушают предсказуемое состояние. Если я устанавливаю [email protected], я хочу, чтобы это было так, и всегда будет таким, пока я целенаправленно не установлю следующую версию.

zero298 12.06.2019 23:40

@zero298 это не самообновляющийся модуль, а просто команда для обновления основного приложения. Однако спасибо, что указали на это :)

TOPKAT 13.06.2019 10:01
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
3
583
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Не очень хорошая практика.

И вы не можете обновлять во время работы. Что я могу предложить, так это то, что вы можете создать новый файл где-нибудь с обновлениями, а затем заменить текущий файл новым файлом из запланированного задания, которое запускается через некоторое время. Не уверен, что ответил на ваш вопрос, но это то, о чем я могу думать.

Спасибо за усилия, но не могли бы вы дать больше объяснений, почему это плохая практика? У меня нет доступа к системным файлам или я не могу использовать sudo, поэтому создание запланированной задачи для меня на самом деле невозможно. Спасибо :)

TOPKAT 13.06.2019 10:00

Если вы работаете над приложением, которое позволяет пользователю создавать свои собственные js-файлы в некоторой среде и запускать их мгновенно, то у вас может не быть большого выбора. В противном случае я бы предложил использовать БД для управления настройками приложения, иначе изменения могут привести к сбою вашего приложения. Кстати, я могу ошибаться :)

Lakshitha Ruwan 13.06.2019 13:07
Ответ принят как подходящий
  • Является ли это возможным ? Да...
  • Это хорошая практика? Это зависит от того, обновляете ли вы приложение, это может быть хорошим подходом...
  • У вас есть совет для такой ситуации? На самом деле не потому, что если вам нужна новая версия вашего приложения, вы должны обновить файлы, но я бы предложил параллельное приложение, которое отвечает за обновление основного приложения...

Пример:

var fs  = require('fs');

console.info("I'm about to delete myself...");

console.info('clonning myself...');
fs.copyFileSync('./selfDelete.js', './selfDelete_bkp.js');

console.info('removing myself...');
fs.unlinkSync('./selfDelete.js');

console.info('new version of me...');
fs.renameSync('./selfDelete_bkp.js', './selfDelete.js');

Другие вопросы по теме