1

次のように defaultArgs を使用してコマンダーをセットアップします。

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

4

1 に答える 1

1

Node cli をバンドルするために webpack を使用している理由について知りたいです。従来、webpack や browserify などのバンドラーは、サーバー側プロジェクトではなく、クライアント側プロジェクトのノード モジュール システムを複製するために使用されていました。(今日、これが JSPM/babel-node の代替手段であることを知りました。)

outputDirデフォルトは呼び出されていませんが、コマンダー定義pathを渡しているため、コマンダーは例外をスローしています。path.resolve(defaults.path))

于 2016-08-17T12:51:54.760 に答える