Skip to content

Commit

Permalink
Merge pull request #55 from davidtheclark/revert-51-fix-require
Browse files Browse the repository at this point in the history
Revert "Use `require` instead of `requireFromString`."
  • Loading branch information
davidtheclark committed Jan 12, 2017
2 parents c3de01c + c23081a commit 9fb6cea
Show file tree
Hide file tree
Showing 9 changed files with 14 additions and 29 deletions.
4 changes: 1 addition & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,13 @@ For example, if your module's name is "soursocks," cosmiconfig will search out c
- a `soursocks.config.js` file exporting a JS object (anywhere down the file tree)
- a CLI `--config` argument

cosmiconfig continues to search in these places all the way down the file tree until it finds acceptable configuration (or hits the home directory). And it does all this asynchronously, so it shouldn't get in your way. (Note that although the search is asynchronous, loading JavaScript is not due to how `require` works).
cosmiconfig continues to search in these places all the way down the file tree until it finds acceptable configuration (or hits the home directory). And it does all this asynchronously, so it shouldn't get in your way.

Additionally, all of these search locations are configurable: you can customize filenames or turn off any location.

You can also look for rc files with extensions, e.g. `.soursocksrc.json` or `.soursocksrc.yaml`.
You may like extensions on your rc files because you'll get syntax highlighting and linting in text editors.

cosmiconfig supports ES6 modules indirectly - for example, if you use babel to transpile your code or you use the babel require hook your configuration JavaScript can just `export default ...` and things will behave as expected.

## Installation

```
Expand Down
10 changes: 5 additions & 5 deletions lib/loadDefinedFile.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use strict';

var yaml = require('js-yaml');
var importJs = require('./require');
var requireFromString = require('require-from-string');
var readFile = require('./readFile');
var parseJson = require('./parseJson');

Expand All @@ -16,7 +16,7 @@ module.exports = function (filepath, options) {
filename: filepath,
});
case 'js':
return importJs(filepath);
return requireFromString(content, filepath);
default:
return tryAllParsing(content, filepath);
}
Expand All @@ -37,7 +37,7 @@ module.exports = function (filepath, options) {

function tryAllParsing(content, filepath) {
return tryYaml(content, filepath, function () {
return tryRequire(filepath, function () {
return tryRequire(content, filepath, function () {
return null;
});
});
Expand All @@ -57,9 +57,9 @@ function tryYaml(content, filepath, cb) {
}
}

function tryRequire(filepath, cb) {
function tryRequire(content, filepath, cb) {
try {
return importJs(filepath);
return requireFromString(content, filepath);
} catch (e) {
return cb();
}
Expand Down
4 changes: 2 additions & 2 deletions lib/loadJs.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
'use strict';

var requireFromString = require('require-from-string');
var readFile = require('./readFile');
var importJs = require('./require');

module.exports = function (filepath) {
return readFile(filepath).then(function (content) {
if (!content) return null;

return {
config: importJs(filepath),
config: requireFromString(content, filepath),
filepath: filepath,
};
});
Expand Down
4 changes: 2 additions & 2 deletions lib/loadRc.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use strict';

var yaml = require('js-yaml');
var importJs = require('./require');
var requireFromString = require('require-from-string');
var readFile = require('./readFile');
var parseJson = require('./parseJson');

Expand Down Expand Up @@ -68,7 +68,7 @@ module.exports = function (filepath, options) {
if (content.config) return content;
var successFilepath = filepath + '.js';
return {
config: importJs(filepath),
config: requireFromString(content, successFilepath),
filepath: successFilepath,
};
}
Expand Down
6 changes: 0 additions & 6 deletions lib/require.js

This file was deleted.

3 changes: 1 addition & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,14 @@
"minimist": "^1.2.0",
"object-assign": "^4.1.0",
"os-homedir": "^1.0.1",
"parse-json": "^2.2.0"
"require-from-string": "^1.1.0"
},
"devDependencies": {
"eslint": "^3.13.0",
"eslint-config-davidtheclark-node": "^0.2.0",
"eslint-plugin-node": "^3.0.5",
"expect": "^1.20.2",
"lodash": "^4.17.4",
"mock-require": "^2.0.0",
"node-version-check": "^2.1.1",
"nyc": "^10.0.0",
"sinon": "^1.17.7",
Expand Down
3 changes: 0 additions & 3 deletions test/failed-directories.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

var test = require('tape');
var sinon = require('sinon');
var mock = require('mock-require');
var path = require('path');
var fs = require('fs');
var _ = require('lodash');
Expand Down Expand Up @@ -218,7 +217,6 @@ test('find invalid package.json', function (assert) {
test('find invalid JS in .config.js file', function (assert) {
setup();
var startDir = absolutePath('a/b');
mock('./a/b/foo.config.js', './fixtures/foo-invalid.js');
readFileStub = sinon.stub(fs, 'readFile', function (searchPath, encoding, callback) {
switch (searchPath) {
case absolutePath('a/b/package.json'):
Expand Down Expand Up @@ -345,7 +343,6 @@ test('with rcExtensions, find invalid YAML in .foorc.yml', function (assert) {
test('with rcExtensions, find invalid JS in .foorc.js', function (assert) {
setup();
var startDir = absolutePath('a/b/c/d/e/f');
mock('./a/b/c/d/e/f/.foorc', './fixtures/foo-invalid');
readFileStub = sinon.stub(fs, 'readFile', function (searchPath, encoding, callback) {
switch (searchPath) {
case absolutePath('a/b/c/d/e/f/package.json'):
Expand Down
2 changes: 1 addition & 1 deletion test/fixtures/foo-invalid.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
module.exports = { foo: true: false }
module.exports = { foo }
7 changes: 2 additions & 5 deletions test/successful-directories.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

var test = require('tape');
var sinon = require('sinon');
var mock = require('mock-require');
var path = require('path');
var fs = require('fs');
var cosmiconfig = require('..');
Expand Down Expand Up @@ -122,7 +121,6 @@ test('find package.json prop in second searched dir', function (assert) {
test('find JS file in first searched dir', function (assert) {
setup();
var startDir = absolutePath('a/b/c/d/e/f');
mock('./a/b/c/d/e/f/foo.config.js', { found: true });
readFileStub = sinon.stub(fs, 'readFile', function (searchPath, encoding, callback) {
switch (searchPath) {
case absolutePath('a/b/c/d/e/f/package.json'):
Expand All @@ -133,7 +131,7 @@ test('find JS file in first searched dir', function (assert) {
callback({ code: 'ENOENT' });
break;
case absolutePath('a/b/c/d/e/f/foo.config.js'):
callback(null, '/* woot */');
callback(null, 'module.exports = { found: true };');
break;
default:
callback(new Error('irrelevant path ' + searchPath));
Expand Down Expand Up @@ -428,7 +426,6 @@ test('with rcExtensions, find .foorc.yml in first searched dir', function (asser
test('with rcExtensions, find .foorc.js in first searched dir', function (assert) {
setup();
var startDir = absolutePath('a/b/c/d/e/f');
mock('./a/b/c/d/e/f/.foorc', { found: true });
readFileStub = sinon.stub(fs, 'readFile', function (searchPath, encoding, callback) {
switch (searchPath) {
case absolutePath('a/b/c/d/e/f/package.json'):
Expand All @@ -439,7 +436,7 @@ test('with rcExtensions, find .foorc.js in first searched dir', function (assert
callback({ code: 'ENOENT' });
break;
case absolutePath('a/b/c/d/e/f/.foorc.js'):
callback(null, '/* woot */');
callback(null, 'module.exports = { found: true };');
break;
default:
callback(new Error('irrelevant path ' + searchPath));
Expand Down

0 comments on commit 9fb6cea

Please sign in to comment.