我试图做一个NPX命令,我可以在里面运行子命令
我的包。json本:
"bin": {
"malzahar": "./src/bin/malzahar.js"
},
这是我的malzahar.js
代码:
#! /usr/bin/env node
import cp from 'child_process'
import yargs from 'yargs'
const argv = yargs(process.argv).argv
const command = argv._[2]
if (command == 'dev') {
// this works
cp.exec('babel-node ./node_modules/malzahar/src/entries/server.js')
// this gives error -2 ENOENT
cp.spawn('babel-node ./node_modules/malzahar/src/entries/server.js')
.on('error', function (error) {
console.log(error)
})
}
server.js
文件只是启动一个基本的express服务器:
import express from 'express'
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
我可以让它工作时使用exec
,但它不输出Example app listening on port 3000
在终端
我读到它可能使用spawn
工作,但当我使用spawn
它给我错误代码-2 ENEONT:
Error: spawn babel-node ./node_modules/malzahar/src/entries/server.js ENOENT
at ChildProcess._handle.onexit (node:internal/child_process:285:19)
at onErrorNT (node:internal/child_process:483:16)
at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
errno: -2,
code: 'ENOENT',
syscall: 'spawn babel-node ./node_modules/malzahar/src/entries/server.js',
path: 'babel-node ./node_modules/malzahar/src/entries/server.js',
spawnargs: []
}
显然exec
也是一个监听器
我让它工作使用这个:
const child = cp.exec('babel-node ./node_modules/malzahar/src/entries/server.js')
child.stdout.on('data', function (data) {
console.log(data)
})