NodeJS exec() 命令在 Windows 和 Ubuntu 上的使用方法

3
使用NodeJS、NPM和Gulp。
我想构建一个gulp任务来运行适用于Ubuntu和Windows的JSDoc。
这在Ubuntu上可以运行...
var exec = require('child_process').exec;

return function(cb) {
  exec('node node_modules/.bin/jsdoc -c jsdoc-conf.json', function(err, stdout, stderr) {
    cb(err);
  });
};

这在Windows上也可以运行...

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

return function(cb) {
  exec('node_modules\\.bin\\jsdoc -c jsdoc-conf.json', function(err, stdout, stderr) {
    cb(err);
  });
};

毋庸置疑,这两者互不兼容。其他人是如何解决这种问题的?
3个回答

6
尝试使用 path.resolve,它可以为您提供文件的完整路径,无论平台如何。

2
Node中有process.platform,它能够返回一个字符串来标识Node.js进程所运行的操作系统平台。例如:darwinfreebsdlinuxsunos 或者 win32等等。更多详细信息请参考https://nodejs.org/api/process.html#process_process_platform
var exec = require('child_process').exec;

return function(cb) {
  if (process.platform === 'win32') {
    // Windows OS
  } else {
    // everything else
  }
};

1
使用 path.resolve
const exec = require('child_process').exec;
const path = require('path');

return function(cb) {
  let command = `node ${path.resolve('node_modules/.bin/jsdoc')} -c jsdoc-conf.json`;

  exec(command, function(err, stdout, stderr) {
    cb(err);
  });
};

如果您想要特定平台类型的路径,我建议使用path.resolve或path.posix.resolve或path.win32.resolve。 - justin.m.chase
@justin.m.chase 重新使用了 path.resolve 进行实现,代码更加简洁。谢谢。 - Hezi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接