Выполните код один раз для одной версии CLI на основе Node.js. - PullRequest
0 голосов
/ 30 мая 2018

Я написал CLI в Node.js, который вы можете установить глобально, используя npm.Теперь я хочу запустить определенный фрагмент кода при первом запуске пользователем моего CLI.Но он должен запускаться только один раз .

Мой вопрос: как я могу определить, что CLI запускается впервые?

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

Но теперь все становится немного сложнее: я хочу, чтобы эта проверка была повторена, когда пользователь обновит CLI до новой версии.Итак, опять же, я мог бы записать файл в домашний каталог пользователя и сохранить в нем версии, для которых я запустил блок кода «один раз».

Но это снова означает, что каждый раз, когда пользовательзапускает CLI, который должен открыть файл, разобрать его, найти версию и так далее.Боюсь, что это может негативно повлиять на производительность запуска.

Есть ли лучший способ решить эту проблему?

1 Ответ

0 голосов
/ 31 мая 2018

У меня есть глупая идея, воспринимать это как академический пример хакерского метапрограммирования.Создайте сценарий с именем script.js:

var fs = require('fs');

if(!process.env.firstRun){
  var content = fs.readFileSync("script.js", "utf8");
  fs.writeFileSync('script.js', 'process.env.firstRun=true;\r\n' + content, 'utf8');
  console.log('first run');
} else {
  console.log('next run');
}

Сценарий просто перезаписывает себя, добавляя дополнительное объявление флага в начале, если оно не установлено.В противном случае он идет другим путем:

λ node .\script.js
first run

λ node .\script.js
next run

λ node .\script.js
next run

Выше было просто для удовольствия.Для производственного кода вы должны перейти к файлу конфигурации, как вы предложили.Чтение одного небольшого файла не представляет особой проблемы, согласно этому методу в моей настройке требуется <0,5 мс (процессор I5, SSD-накопитель), так что это определенно путь. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...