Нужны ли мне два файла для запуска модуля JS с node CLI?

#javascript #node.js

#javascript #node.js

Вопрос:

У меня есть модуль, который экспортирует метод, используемый в тестировании JEST. Я тоже хочу запустить его из командной строки.

 async function doRun() { /* do something */}
exports.doRun = doRun;
  

Это хорошо работает с JEST, где я импортирую модуль и выполняю метод. Но когда я вызываю его с node module.js помощью, это не имеет никакого эффекта, потому что метод не выполняется в теле JS. Чтобы исправить это, я должен добавить:

 doRun().then(() => console.log('finished'));
  

что заставляет код работать из CLI, но он выполняется тоже в шутку сразу после импорта.

Я прав, что мне нужно создать новый файл, который импортирует модуль и запускает код только для CLI?

 const module = require('module.js')
doRun().then(() => console.log('finished'));
  

а затем запустить node module_cli.js ?

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

1. почему есть downvote?

2. Черт возьми, я тоже этого не понял. У Node есть множество опций, я бы не удивился, обнаружив одну, в которой говорилось: «загрузите этот модуль, затем выполните этот код». (Я этого не делал, но это меня бы не удивило. 🙂 )

Ответ №1:

В значительной степени, да. 🙂

Либо это, либо используйте переменную среды

 async function doRun() { /* do something */}
exports.doRun = doRun;
if (process.env.AUTO_RUN === "Y") {
    doRun().then(() => console.log('finished'));
}
  

и запустите его так на * nix:

AUTO_RUN= Y узел module.js

… или в Windows в соответствии с этим это было бы:

cmd / V / C "set AUTO_RUN=Yamp;amp;node module.js "

Вы также можете использовать стандартную NODE_ENV переменную среды. Я не углубился в шутку, но он может установить его на "testing" или что-то в этом роде…