Skip to content

NODE_CONFIG_DIR multiple relative directory paths separated by path.delimiter throws an error #660

Closed
@inside

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

#632

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();

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions