diff --git a/test/fixtures/broken-json/package.json b/test/fixtures/broken-json/package.json new file mode 100644 index 000000000..275e88e36 --- /dev/null +++ b/test/fixtures/broken-json/package.json @@ -0,0 +1 @@ +{'foo': bar} diff --git a/test/yargs.js b/test/yargs.js index f82972276..382a67ded 100644 --- a/test/yargs.js +++ b/test/yargs.js @@ -945,6 +945,15 @@ describe('yargs dsl tests', function () { argv.foo.should.equal('a') argv.dotNotation.should.equal(false) }) + + // see https://github.com/yargs/yargs/issues/485 + it('handles an invalid package.json', function () { + var argv = yargs('--foo a') + .pkgConf('yargs', './test/fixtures/broken-json') + .argv + + argv.foo.should.equal('a') + }) }) describe('skipValidation', function () { diff --git a/yargs.js b/yargs.js index 54e896590..494811b10 100644 --- a/yargs.js +++ b/yargs.js @@ -360,9 +360,12 @@ function Yargs (processArgs, cwd, parentRequire) { if (pkg && !path) return pkg const readPkgUp = require('read-pkg-up') - var obj = readPkgUp.sync({ - cwd: path || requireMainFilename(parentRequire || require) - }) + var obj = {} + try { + obj = readPkgUp.sync({ + cwd: path || requireMainFilename(parentRequire || require) + }) + } catch (noop) {} if (obj.pkg) pkg = obj.pkg return pkg || {}