Commander 不使用默认值

Commander not using default values

我像这样使用 defaultArgs 设置 commander:

import * as validations from './validation'
import program from 'commander'
import path from 'path'

export default function initializeCommander (defaults) {
  program
    .version('0.0.1')
    .usage('redbubble-demo')
    .option('-u', '--url [url]', validations.isValidUrl, defaults.url)
    .option('-o', '--output-dir [path]', validations.hasValidParentDirectory, path.resolve(defaults.path))
    .option('-s', '--size [size]', validations.isValidSize, defaults.size)
    .parse(process.argv)

  return program
}

我在这里设置了默认值并将它们传递给这样的函数:

const defaultValues = {
  url: 'someuRL',
  size: 'medium',
  outputDir: './www'
}
const program = initializeCommander(defaultValues)
console.log(program) //no value in console

当我尝试访问 program 中的选项时,我没有得到任何值。

我在不使用任何参数的情况下调用我的应用程序:

babel-node src/index.js

更新:

我现在可以 运行 使用 npm link 将应用程序作为二进制文件,但我收到此错误:

TypeError: Path must be a string. Received undefined
    at assertPath (path.js:7:11)
    at Object.resolve (path.js:1146:7)
    at initializeCommander (/home/vamsi/Do/redbubble-demo/build/index.js:9889:222)
    at Object.<anonymous> (/home/vamsi/Do/redbubble-demo/build/index.js:87:34)
    at __webpack_require__ (/home/vamsi/Do/redbubble-demo/build/index.js:22:30)
    at /home/vamsi/Do/redbubble-demo/build/index.js:42:18
    at Object.<anonymous> (/home/vamsi/Do/redbubble-demo/build/index.js:45:10)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:458:32)

stack trace 中的行号已关闭,因为我正在使用 webpack 将其捆绑。

我很好奇您为什么使用 webpack 来捆绑 Node cli。传统上,像 webpack 或 browserify 这样的捆绑器用于为客户端项目复制节点模块系统,而不是为服务器端项目复制节点模块系统。(今天我了解到这是一个 JSPM/babel-node 替代方案。)

Commander 抛出异常,因为您的默认调用是 outputDir 而不是 path,但您在指挥官定义中传递了 path.resolve(defaults.path))