#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; в этом случае. Спасибо!