Синтаксический анализ команды npm

#javascript #node.js #npm

#javascript #node.js #npm

Вопрос:

У меня есть скрипт, который заменяет данные в базе данных, и я хочу запустить этот скрипт с npm command

package.json

 "scripts": {
    "database": "node devData/database.js --delete amp; node devData/database.js --import"
  },
 

database.js

 if (process.argv[2] === '--import') {
    importData();
} else if (process.env[2] === '--delete') {
    deleteData();
}
 

Ключ здесь amp; , я думаю. С помощью этого решения распознается только первая часть npm command , которая есть --delete .

Я изменил команду npm на package.json "node devData/database.js --delete ; node devData/database.js --import" , а затем внутри database.js я запускаю forEach , чтобы проверить, есть ли у меня --import или --delete

 process.argv.forEach(part => {
    part === '--delete' ? deleteData() : part === '--import' ? importData() : '';
})
 

Решение работает, но иногда мне приходится запускать его дважды из-за загрузки одного и того же содержимого db , что приводит к дублированию ошибки.
Спасибо за любой совет.

Комментарии:

1. Ваш первый код в database.js проверяет argv для одного и process.env для другого — разве обе проверки не должны быть argv?

2. Я этого не предвидел, вы правы, это была опечатка, спасибо

Ответ №1:

Вы хотите выполнить одну команду, а затем, после ее успешного выполнения, выполнить вторую команду, не так ли? Для этого используйте amp;amp; оператор which is the shell «and». (При использовании single amp; командная оболочка вводит первую команду в фоновом режиме.)

 "scripts": {
    "database": "node devData/database.js --delete amp;amp; node devData/database.js --import"
  },
 

С amp;amp; помощью оператора вторая команда выполняется до тех пор, пока первая команда не завершится с кодом ошибки.

Комментарии:

1. Привет, спасибо за совет, но, к сожалению, это не решает проблему. Работает только первая часть команды, но —import не запускается и не отображается, когда я console.log(process.argv[2]). Если я поменяю порядок, я смогу импортировать данные

2. Если импорт не запускается в этом случае, это потому, что команда удаления завершилась с кодом ошибки. Вот в чем amp;amp; суть.

3. О’кей, я решил проблему, ваш комментарий дал мне подсказку. Мне не хватало process.exit() внутри функций ImportData и deleteData в блоке try catch. После добавления он работает так, как ожидалось. Я проверил amp; и amp;amp; решение работает независимо от amp; в этом случае. Спасибо!