【问题标题】:NodeJS exec() command for both Windows and Ubuntu适用于 Windows 和 Ubuntu 的 NodeJS exec() 命令
【发布时间】:2016-11-03 05:23:23
【问题描述】:

使用 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);
  });
};

不用说,两者都不适用。其他人如何解决这类问题?

【问题讨论】:

    标签: node.js windows ubuntu npm gulp


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      Node 有process.platform,它... "返回一个字符串,标识运行 Node.js 进程的操作系统平台。例如darwin、freebsd、linux、sunos 或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
        }
      };
      

      【讨论】:

        【解决方案3】:

        使用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 使用 path.resolve 重新实现,更加简洁。谢谢
        猜你喜欢
        • 2011-03-28
        • 2021-01-29
        • 1970-01-01
        • 1970-01-01
        • 2014-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多