From ed1f485e3a56df206f3f9df3726ccd572cf160af Mon Sep 17 00:00:00 2001 From: nokutana <68359835+nokutana@users.noreply.github.com> Date: Wed, 30 Sep 2020 23:16:43 -0700 Subject: [PATCH] Fix relative module resolution for config files I was receiving a `MODULE_NOT_FOUND` error with my config since it references relative modules. This sets `configFile` as the `filename` argument to `require-from-string` so relative modules can be resolved properly --- packages/config/src/__tests__/ConfigParsing-test.js | 9 +++++++++ .../language-support/js/with-import_app.config.js | 6 ++++++ packages/config/src/evalConfig.ts | 2 +- 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 packages/config/src/__tests__/fixtures/language-support/js/with-import_app.config.js diff --git a/packages/config/src/__tests__/ConfigParsing-test.js b/packages/config/src/__tests__/ConfigParsing-test.js index d417b46759..c1699c7549 100644 --- a/packages/config/src/__tests__/ConfigParsing-test.js +++ b/packages/config/src/__tests__/ConfigParsing-test.js @@ -62,6 +62,15 @@ describe('getConfig', () => { expect(exp.foo).toBe('bar'); expect(exp.name).toBe('cool+export-json_app.config'); }); + it('parses a js config with import', () => { + const projectRoot = path.resolve(__dirname, './fixtures/language-support/js'); + const configPath = path.resolve(projectRoot, 'with-import_app.config.js'); + setCustomConfigPath(projectRoot, configPath); + const { exp } = getConfig(projectRoot, { + skipSDKVersionRequirement: true, + }); + expect(exp.foo).toBe('bar'); + }); xit('parses a yaml config', () => { const projectRoot = path.resolve(__dirname, './fixtures/language-support/yaml'); const { exp } = getConfig(projectRoot, { diff --git a/packages/config/src/__tests__/fixtures/language-support/js/with-import_app.config.js b/packages/config/src/__tests__/fixtures/language-support/js/with-import_app.config.js new file mode 100644 index 0000000000..af1719d6d5 --- /dev/null +++ b/packages/config/src/__tests__/fixtures/language-support/js/with-import_app.config.js @@ -0,0 +1,6 @@ +const { foo } = require('./export-json_app.config'); + +module.exports = function ({ config }) { + config.foo = foo; + return config; +}; diff --git a/packages/config/src/evalConfig.ts b/packages/config/src/evalConfig.ts index 31a1728cb8..c0b3fe993b 100644 --- a/packages/config/src/evalConfig.ts +++ b/packages/config/src/evalConfig.ts @@ -35,7 +35,7 @@ export function evalConfig( presets: [preset], }); - let result = requireString(code); + let result = requireString(code, configFile); if (result.default != null) { result = result.default; }