Closed
Description
Hi! 👋
Firstly, thanks for your work on this project! 🙂
Today I used patch-package to patch config@3.3.6
for the project I'm working on.
I'm submitting a ...
- bug report
Reproduction repository
https://github.com/inside/config-multiple-directories
Related issues
What is the current behavior?
When assigning multiple relative directory paths to NODE_CONFIG_DIR, the following error is thrown:
/home/inside/src/test-config2/node_modules/config/lib/config.js:844
throw new Error("Cannot parse config file: '" + fullFilename + "': " + e3);
^
Error: Cannot parse config file: 'configB/default.js': Error: Cannot find module 'configB/default.js'
Require stack:
- /home/inside/src/test-config2/node_modules/config/parser.js
- /home/inside/src/test-config2/node_modules/config/lib/config.js
- /home/inside/src/test-config2/index.js
at Config.util.parseFile (/home/inside/src/test-config2/node_modules/config/lib/config.js:844:11)
at /home/inside/src/test-config2/node_modules/config/lib/config.js:644:26
at Array.forEach (<anonymous>)
at Config.util.loadFileConfigs (/home/inside/src/test-config2/node_modules/config/lib/config.js:643:16)
at new Config (/home/inside/src/test-config2/node_modules/config/lib/config.js:116:27)
at Object.<anonymous> (/home/inside/src/test-config2/node_modules/config/lib/config.js:1492:31)
at Module._compile (internal/modules/cjs/loader.js:1072:14)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
at Module.load (internal/modules/cjs/loader.js:937:32)
at Function.Module._load (internal/modules/cjs/loader.js:778:12)
What is the expected behavior?
The config should get multiple directories regarldess of their relative or absolute path
Please tell us about your environment:
- node-config version: 3.3.6
- node-version: 14.17.5
Here is the diff that solved my problem:
diff --git a/node_modules/config/lib/config.js b/node_modules/config/lib/config.js
index 0640cf5..d353248 100644
--- a/node_modules/config/lib/config.js
+++ b/node_modules/config/lib/config.js
@@ -563,10 +563,7 @@ util.loadFileConfigs = function(configDir, options) {
NODE_ENV = NODE_ENV.split(',');
CONFIG_DIR = configDir || util.initParam('NODE_CONFIG_DIR', Path.join( process.cwd(), 'config') );
- if (CONFIG_DIR.indexOf('.') === 0) {
- CONFIG_DIR = Path.join(process.cwd() , CONFIG_DIR);
- }
-
+ CONFIG_DIR = _toAbsolutePath({ path: CONFIG_DIR })
APP_INSTANCE = util.initParam('NODE_APP_INSTANCE');
HOST = util.initParam('HOST');
HOSTNAME = util.initParam('HOSTNAME');
@@ -718,6 +715,7 @@ util.locateMatchingFiles = function(configDirs, allowedFiles) {
return configDirs.split(Path.delimiter)
.reduce(function(files, configDir) {
if (configDir) {
+ configDir = _toAbsolutePath({ path: configDir })
try {
FileSystem.readdirSync(configDir).forEach(function(file) {
if (allowedFiles[file]) {
@@ -1488,6 +1486,15 @@ util.runStrictnessChecks = function (config) {
}
};
+// Helper functions shared accross object members
+function _toAbsolutePath (options) {
+ if (options.path.startsWith('.')) {
+ return Path.resolve(options.path)
+ }
+
+ return options.path
+}
+
// Instantiate and export the configuration
var config = module.exports = new Config();