Как выполнить программную команду "npm run"?

У меня есть специальный скрипт для тестирования, который я могу запустить с npm run test команды npm run test, которая выполняет некоторый сценарий Node для запуска тестов e2e/unit. Но перед этим я должен запустить webpack dev-сервер с npm run dev (это также некий пользовательский сценарий Node, подробности не имеют значения) в другом окне терминала. Таким образом, я хочу опустить npm run dev вручную и переместить его в пользовательский сценарий npm run test подлинности npm run test, т.е. Я хочу программно запустить webpack dev сервер в сценарии Node. Как я могу выполнить npm run dev программным образом с помощью сценария Node и остановить его? Заранее спасибо!

"dev": "node node_modules/webpack-dev-server/bin/webpack-dev-server.js --host 0.0.0.0 --history-api-fallback --debug --inline --progress --config config/config.js"

Ответы

Ответ 1

Вы можете использовать exec для запуска из скрипта

import {series} from 'async';
const {exec} = require('child_process');

series([
 exec('npm run dev'),
 exec('npm run test')
]); 

Ответ 2

Просто установите npm:

npm install npm

Затем в вашей программе:

npm.command.run('dev', (err) => { ... });

Дополнительную информацию см. В источнике. Объект npm.command является неофициальным API для npm.

Ответ 3

Используйте PM2, это действительно полезно и легко...

npm install pm2
const pm2 = require('pm2');

pm2.start({
    script: 'npm -- run monitorTheWeather',
    autorestart : false 
  }, (err, apps) => {
    pm2.disconnect()
    if (err) { throw err }
  })

Ответ 4

В машинописи:

import { exec } from 'child_process'
import { promisify } from 'util'

const asyncExec = promisify(exec)
;(async () => {
   await asyncExec('npm run db:seed')
   await asyncExec('npm start')
})()