node.js - 在nodejs中生成子进程来调用npm安装的命令会导致Windows中的ENOENT

标签 node.js child-process

我搜索了很多,但没有得到正确的答案。

首先,我确定该命令在命令行下可用,这是输出:

> lessc
lessc: no input files

usage: lessc [option option=parameter ...] <source> [destination]

但是当使用child_process.spawn时,我得到:

> node test.js
Encountered error: { [Error: spawn ENOENT] code: 'ENOENT', errno: 'ENOENT', syscall: 'spawn' }

我确信process.env已被赋予spawn,这里是nodejs代码:

var build = require('child_process').spawn(
    'lessc',
    [],
    {
        stdio: 'inherit',
        env: process.env
    }
);

build.on(
    'error',
    function (err) {
        console.log('Encountered error:', err);
        process.exit();
    }
);
build.on(
    'close', 
    function (err) {
        console.log('close');
    }
);

奇怪的是,当通过 npm install -g 安装该命令时,它只会遇到 ENOENT,它在例如 dirdel系统命令

最佳答案

事实证明,以下方法有效:

var spawn = require('child_process').spawn;

var b = spawn(
    process.env.comspec,
    ['/c', 'lessc'],
    { stdio: 'inherit' }
);

请注意,您不需要像以前那样显式传递 env,默认是继承。

关于node.js - 在nodejs中生成子进程来调用npm安装的命令会导致Windows中的ENOENT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19417652/

相关文章:

selenium-webdriver - JRuby Watir phantomjs 异常未知错误(Windows 说 "The operation completed successfully.",但它没有。)

node.js - 在 Node 中执行子进程来控制控制台

node.js - Node child_process.spawn : determine when all the spawned child processes are closed or have exited?

javascript - 与 Google Chrome Puppeteer 互动

node.js - 在 react 中从数据库获取数据的正确方法是什么?

c - 如何用 C 检测 Linux 上 exec'ed 子进程的文件事件?

node.js - Child_process fork - 间歇性读取错误

javascript - 如何在不使用express的情况下在nodejs中创建 session

html - 从html中的脚本获取javascript对象

node.js - 在 express.js 中将请求对象传递给 jade