ale*_*nco 3 javascript command-line-interface node.js
我想用指挥官读一个文件:
#!/usr/bin/env node
var fs = require('fs')
var program = require('commander')
program
.version('0.0.1')
.usage('<keywords>')
.parse(process.argv)
if(!program.args.length) {
program.help()
} else {
var filename = program.args
console.log('keys: ' + filename)
fs.readFile(filename, 'utf8', function(err, data) {
if (err) throw err
console.log(data)
})
}
$ ./m2k.js test.txt
Run Code Online (Sandbox Code Playgroud)
但是,我得到了这个错误:
fs.js:430
binding.open(pathModule._makeLong(path),
^
TypeError: path must be a string
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
(我有一个文件test.txt在同一个文件夹中调用m2k.js.)
如果您打印类型program.args或program.args自身,您将知道它的数组.
console.log(Object.prototype.toString.call(program.args), program.args);
// [object Array] [ 'test.txt' ]
Run Code Online (Sandbox Code Playgroud)
因此,您需要使用正确的索引来像这样使用
var filename = program.args[0];
Run Code Online (Sandbox Code Playgroud)
我认为结果对console.log('keys: ' + filename)你没有多大帮助.这是因为当你使用+operator时,它会尝试将filename对象转换为字符串,并且转换为字符串的String数组通常只有逗号分隔的字符串.你可以这样检查一下
console.log(['a'].toString(), ['a', 'b'].toString());
// a a,b
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6727 次 |
| 最近记录: |