Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: load esm vite config without a temporary file #17894

Closed
wants to merge 16 commits into from

Conversation

hi-ogawa
Copy link
Collaborator

@hi-ogawa hi-ogawa commented Aug 18, 2024

Description

Closes #13267
Closes #9470

This PR revives #13269 with a fix for arbitrary dynamic imports.

As explained in #13267 (comment), the previous PR #13269 was reverted due to a regression #13730. This PR handles the dynamic import issue by replacing import(anything) with __vite_config_import_helper__(configFile, anything) to implement current behavior.

todo

Copy link

stackblitz bot commented Aug 18, 2024

Review PR in StackBlitz Codeflow Run & review this pull request in StackBlitz Codeflow.

@hi-ogawa hi-ogawa changed the title fix: import esm vite config without temporary file fix: load esm vite config without temporary file Aug 18, 2024
@hi-ogawa hi-ogawa changed the title fix: load esm vite config without temporary file fix: load esm vite config without a temporary file Aug 18, 2024
@hi-ogawa hi-ogawa marked this pull request as ready for review August 19, 2024 09:15
@patak-dev patak-dev added this to the 6.0 milestone Aug 21, 2024
@hi-ogawa
Copy link
Collaborator Author

hi-ogawa commented Aug 22, 2024

I'm checking how errors look like and this change might degrade DX heavily. While we can strip the error stack when the error is thrown during config loading, it's probably difficult to deal with the case where errors are thrown by plugins written directly inside the config file.

I added a simple example in vite.config.error-plugin.ts and the error looks like this:

pnpm -C playground/config/packages/entry exec vite build -c vite.config.error-plugin.ts
Before
$ pnpm -C playground/config/packages/entry exec vite build -c vite.config.error-plugin.ts
vite v5.4.2 building for production...
✓ 0 modules transformed.
x Build failed in 8ms
error during build:
[test-plugin-error] Testing Error
file: virtual:entry
    at testError (file:///home/hiroshi/code/others/vite/playground/config/packages/entry/vite.config.error-plugin.ts.timestamp-1724320198303-72e830651facf.mjs:32:9)
    at Object.transform (file:///home/hiroshi/code/others/vite/playground/config/packages/entry/vite.config.error-plugin.ts.timestamp-1724320198303-72e830651facf.mjs:8:9)
    at file:///home/hiroshi/code/others/vite/node_modules/.pnpm/rollup@4.20.0/node_modules/rollup/dist/es/shared/node-entry.js:19892:40

image

After
$ pnpm -C playground/config/packages/entry exec vite build -c vite.config.error-plugin.ts
vite v5.4.2 building for production...
✓ 0 modules transformed.
x Build failed in 8ms
error during build:
[test-plugin-error] Testing Error
file: virtual:entry
    at testError (data:text/javascript;base64,IjE3MjQzMTg2MjM1NTYtM2IxN2Y2ZmRjOGNiMyI7Ly8gdml0ZS5jb25maWcuZXJyb3ItcGx1Z2luLnRzCmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gImZpbGU6Ly8vaG9tZS9oaXJvc2hpL2NvZGUvb3RoZXJzL3ZpdGUvcGFja2FnZXMvdml0ZS9kaXN0L25vZGUvaW5kZXguanMiOwp2YXIgdml0ZV9jb25maWdfZXJyb3JfcGx1Z2luX2RlZmF1bHQgPSBkZWZpbmVDb25maWcoewogIHBsdWdpbnM6IFsKICAgIHsKICAgICAgbmFtZTogInRlc3QtcGx1Z2luLWVycm9yIiwKICAgICAgdHJhbnNmb3JtKGNvZGUsIGlkLCBvcHRpb25zKSB7CiAgICAgICAgdGVzdEVycm9yKCk7CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJ2aXJ0dWFsLWVudHJ5IiwKICAgICAgcmVzb2x2ZUlkKHNvdXJjZSwgaW1wb3J0ZXIsIG9wdGlvbnMpIHsKICAgICAgICBpZiAoc291cmNlID09PSAidmlydHVhbDplbnRyeSIpIHsKICAgICAgICAgIHJldHVybiAiXDAiICsgc291cmNlOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbG9hZChpZCwgb3B0aW9ucykgewogICAgICAgIGlmIChpZCA9PT0gIlwwdmlydHVhbDplbnRyeSIpIHsKICAgICAgICAgIHJldHVybiBgZXhwb3J0IGRlZmF1bHQge31gOwogICAgICAgIH0KICAgICAgfQogICAgfQogIF0sCiAgYnVpbGQ6IHsKICAgIHJvbGx1cE9wdGlvbnM6IHsKICAgICAgaW5wdXQ6ICJ2aXJ0dWFsOmVudHJ5IgogICAgfQogIH0KfSk7CmZ1bmN0aW9uIHRlc3RFcnJvcigpIHsKICB0aHJvdyBuZXcgRXJyb3IoIlRlc3RpbmcgRXJyb3IiKTsKfQpleHBvcnQgewogIHZpdGVfY29uZmlnX2Vycm9yX3BsdWdpbl9kZWZhdWx0IGFzIGRlZmF1bHQKfTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxld29nSUNKMlpYSnphVzl1SWpvZ015d0tJQ0FpYzI5MWNtTmxjeUk2SUZzaWRtbDBaUzVqYjI1bWFXY3VaWEp5YjNJdGNHeDFaMmx1TG5SeklsMHNDaUFnSW5OdmRYSmpaWE5EYjI1MFpXNTBJam9nV3lKamIyNXpkQ0JmWDNacGRHVmZhVzVxWldOMFpXUmZiM0pwWjJsdVlXeGZaR2x5Ym1GdFpTQTlJRndpTDJodmJXVXZhR2x5YjNOb2FTOWpiMlJsTDI5MGFHVnljeTkyYVhSbEwzQnNZWGxuY205MWJtUXZZMjl1Wm1sbkwzQmhZMnRoWjJWekwyVnVkSEo1WENJN1kyOXVjM1FnWDE5MmFYUmxYMmx1YW1WamRHVmtYMjl5YVdkcGJtRnNYMlpwYkdWdVlXMWxJRDBnWENJdmFHOXRaUzlvYVhKdmMyaHBMMk52WkdVdmIzUm9aWEp6TDNacGRHVXZjR3hoZVdkeWIzVnVaQzlqYjI1bWFXY3ZjR0ZqYTJGblpYTXZaVzUwY25rdmRtbDBaUzVqYjI1bWFXY3VaWEp5YjNJdGNHeDFaMmx1TG5SelhDSTdZMjl1YzNRZ1gxOTJhWFJsWDJsdWFtVmpkR1ZrWDI5eWFXZHBibUZzWDJsdGNHOXlkRjl0WlhSaFgzVnliQ0E5SUZ3aVptbHNaVG92THk5b2IyMWxMMmhwY205emFHa3ZZMjlrWlM5dmRHaGxjbk12ZG1sMFpTOXdiR0Y1WjNKdmRXNWtMMk52Ym1acFp5OXdZV05yWVdkbGN5OWxiblJ5ZVM5MmFYUmxMbU52Ym1acFp5NWxjbkp2Y2kxd2JIVm5hVzR1ZEhOY0lqdHBiWEJ2Y25RZ2V5QmtaV1pwYm1WRGIyNW1hV2NnZlNCbWNtOXRJQ2QyYVhSbEoxeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQmtaV1pwYm1WRGIyNW1hV2NvZTF4dUlDQndiSFZuYVc1ek9pQmJYRzRnSUNBZ2UxeHVJQ0FnSUNBZ2JtRnRaVG9nSjNSbGMzUXRjR3gxWjJsdUxXVnljbTl5Snl4Y2JpQWdJQ0FnSUhSeVlXNXpabTl5YlNoamIyUmxMQ0JwWkN3Z2IzQjBhVzl1Y3lrZ2UxeHVJQ0FnSUNBZ0lDQjBaWE4wUlhKeWIzSW9LVnh1SUNBZ0lDQWdmU3hjYmlBZ0lDQjlMRnh1SUNBZ0lIdGNiaUFnSUNBZ0lHNWhiV1U2SUNkMmFYSjBkV0ZzTFdWdWRISjVKeXhjYmlBZ0lDQWdJSEpsYzI5c2RtVkpaQ2h6YjNWeVkyVXNJR2x0Y0c5eWRHVnlMQ0J2Y0hScGIyNXpLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaHpiM1Z5WTJVZ1BUMDlJQ2QyYVhKMGRXRnNPbVZ1ZEhKNUp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUFuWEZ3d0p5QXJJSE52ZFhKalpWeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdiRzloWkNocFpDd2diM0IwYVc5dWN5a2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2FXUWdQVDA5SUNkY1hEQjJhWEowZFdGc09tVnVkSEo1SnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmdaWGh3YjNKMElHUmxabUYxYkhRZ2UzMWdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDBzWEc0Z0lDQWdmU3hjYmlBZ1hTeGNiaUFnWW5WcGJHUTZJSHRjYmlBZ0lDQnliMnhzZFhCUGNIUnBiMjV6T2lCN1hHNGdJQ0FnSUNCcGJuQjFkRG9nSjNacGNuUjFZV3c2Wlc1MGNua25MRnh1SUNBZ0lIMHNYRzRnSUgwc1hHNTlLVnh1WEc1bWRXNWpkR2x2YmlCMFpYTjBSWEp5YjNJb0tTQjdYRzRnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduVkdWemRHbHVaeUJGY25KdmNpY3BYRzU5WEc0aVhTd0tJQ0FpYldGd2NHbHVaM01pT2lBaU8wRkJRWGxaTEZOQlFWTXNiMEpCUVc5Q08wRkJSWFJoTEVsQlFVOHNiVU5CUVZFc1lVRkJZVHRCUVVGQkxFVkJRekZDTEZOQlFWTTdRVUZCUVN4SlFVTlFPMEZCUVVFc1RVRkRSU3hOUVVGTk8wRkJRVUVzVFVGRFRpeFZRVUZWTEUxQlFVMHNTVUZCU1N4VFFVRlRPMEZCUXpOQ0xHdENRVUZWTzBGQlFVRXNUVUZEV2p0QlFVRkJMRWxCUTBZN1FVRkJRU3hKUVVOQk8wRkJRVUVzVFVGRFJTeE5RVUZOTzBGQlFVRXNUVUZEVGl4VlFVRlZMRkZCUVZFc1ZVRkJWU3hUUVVGVE8wRkJRMjVETEZsQlFVa3NWMEZCVnl4cFFrRkJhVUk3UVVGRE9VSXNhVUpCUVU4c1QwRkJUenRCUVVGQkxGRkJRMmhDTzBGQlFVRXNUVUZEUmp0QlFVRkJMRTFCUTBFc1MwRkJTeXhKUVVGSkxGTkJRVk03UVVGRGFFSXNXVUZCU1N4UFFVRlBMRzFDUVVGdFFqdEJRVU0xUWl4cFFrRkJUenRCUVVGQkxGRkJRMVE3UVVGQlFTeE5RVU5HTzBGQlFVRXNTVUZEUmp0QlFVRkJMRVZCUTBZN1FVRkJRU3hGUVVOQkxFOUJRVTg3UVVGQlFTeEpRVU5NTEdWQlFXVTdRVUZCUVN4TlFVTmlMRTlCUVU4N1FVRkJRU3hKUVVOVU8wRkJRVUVzUlVGRFJqdEJRVU5HTEVOQlFVTTdRVUZGUkN4VFFVRlRMRmxCUVZrN1FVRkRia0lzVVVGQlRTeEpRVUZKTEUxQlFVMHNaVUZCWlR0QlFVTnFRenNpTEFvZ0lDSnVZVzFsY3lJNklGdGRDbjBLCg==:32:9)
    at Object.transform (data:text/javascript;base64,IjE3MjQzMTg2MjM1NTYtM2IxN2Y2ZmRjOGNiMyI7Ly8gdml0ZS5jb25maWcuZXJyb3ItcGx1Z2luLnRzCmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gImZpbGU6Ly8vaG9tZS9oaXJvc2hpL2NvZGUvb3RoZXJzL3ZpdGUvcGFja2FnZXMvdml0ZS9kaXN0L25vZGUvaW5kZXguanMiOwp2YXIgdml0ZV9jb25maWdfZXJyb3JfcGx1Z2luX2RlZmF1bHQgPSBkZWZpbmVDb25maWcoewogIHBsdWdpbnM6IFsKICAgIHsKICAgICAgbmFtZTogInRlc3QtcGx1Z2luLWVycm9yIiwKICAgICAgdHJhbnNmb3JtKGNvZGUsIGlkLCBvcHRpb25zKSB7CiAgICAgICAgdGVzdEVycm9yKCk7CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJ2aXJ0dWFsLWVudHJ5IiwKICAgICAgcmVzb2x2ZUlkKHNvdXJjZSwgaW1wb3J0ZXIsIG9wdGlvbnMpIHsKICAgICAgICBpZiAoc291cmNlID09PSAidmlydHVhbDplbnRyeSIpIHsKICAgICAgICAgIHJldHVybiAiXDAiICsgc291cmNlOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbG9hZChpZCwgb3B0aW9ucykgewogICAgICAgIGlmIChpZCA9PT0gIlwwdmlydHVhbDplbnRyeSIpIHsKICAgICAgICAgIHJldHVybiBgZXhwb3J0IGRlZmF1bHQge31gOwogICAgICAgIH0KICAgICAgfQogICAgfQogIF0sCiAgYnVpbGQ6IHsKICAgIHJvbGx1cE9wdGlvbnM6IHsKICAgICAgaW5wdXQ6ICJ2aXJ0dWFsOmVudHJ5IgogICAgfQogIH0KfSk7CmZ1bmN0aW9uIHRlc3RFcnJvcigpIHsKICB0aHJvdyBuZXcgRXJyb3IoIlRlc3RpbmcgRXJyb3IiKTsKfQpleHBvcnQgewogIHZpdGVfY29uZmlnX2Vycm9yX3BsdWdpbl9kZWZhdWx0IGFzIGRlZmF1bHQKfTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxld29nSUNKMlpYSnphVzl1SWpvZ015d0tJQ0FpYzI5MWNtTmxjeUk2SUZzaWRtbDBaUzVqYjI1bWFXY3VaWEp5YjNJdGNHeDFaMmx1TG5SeklsMHNDaUFnSW5OdmRYSmpaWE5EYjI1MFpXNTBJam9nV3lKamIyNXpkQ0JmWDNacGRHVmZhVzVxWldOMFpXUmZiM0pwWjJsdVlXeGZaR2x5Ym1GdFpTQTlJRndpTDJodmJXVXZhR2x5YjNOb2FTOWpiMlJsTDI5MGFHVnljeTkyYVhSbEwzQnNZWGxuY205MWJtUXZZMjl1Wm1sbkwzQmhZMnRoWjJWekwyVnVkSEo1WENJN1kyOXVjM1FnWDE5MmFYUmxYMmx1YW1WamRHVmtYMjl5YVdkcGJtRnNYMlpwYkdWdVlXMWxJRDBnWENJdmFHOXRaUzlvYVhKdmMyaHBMMk52WkdVdmIzUm9aWEp6TDNacGRHVXZjR3hoZVdkeWIzVnVaQzlqYjI1bWFXY3ZjR0ZqYTJGblpYTXZaVzUwY25rdmRtbDBaUzVqYjI1bWFXY3VaWEp5YjNJdGNHeDFaMmx1TG5SelhDSTdZMjl1YzNRZ1gxOTJhWFJsWDJsdWFtVmpkR1ZrWDI5eWFXZHBibUZzWDJsdGNHOXlkRjl0WlhSaFgzVnliQ0E5SUZ3aVptbHNaVG92THk5b2IyMWxMMmhwY205emFHa3ZZMjlrWlM5dmRHaGxjbk12ZG1sMFpTOXdiR0Y1WjNKdmRXNWtMMk52Ym1acFp5OXdZV05yWVdkbGN5OWxiblJ5ZVM5MmFYUmxMbU52Ym1acFp5NWxjbkp2Y2kxd2JIVm5hVzR1ZEhOY0lqdHBiWEJ2Y25RZ2V5QmtaV1pwYm1WRGIyNW1hV2NnZlNCbWNtOXRJQ2QyYVhSbEoxeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQmtaV1pwYm1WRGIyNW1hV2NvZTF4dUlDQndiSFZuYVc1ek9pQmJYRzRnSUNBZ2UxeHVJQ0FnSUNBZ2JtRnRaVG9nSjNSbGMzUXRjR3gxWjJsdUxXVnljbTl5Snl4Y2JpQWdJQ0FnSUhSeVlXNXpabTl5YlNoamIyUmxMQ0JwWkN3Z2IzQjBhVzl1Y3lrZ2UxeHVJQ0FnSUNBZ0lDQjBaWE4wUlhKeWIzSW9LVnh1SUNBZ0lDQWdmU3hjYmlBZ0lDQjlMRnh1SUNBZ0lIdGNiaUFnSUNBZ0lHNWhiV1U2SUNkMmFYSjBkV0ZzTFdWdWRISjVKeXhjYmlBZ0lDQWdJSEpsYzI5c2RtVkpaQ2h6YjNWeVkyVXNJR2x0Y0c5eWRHVnlMQ0J2Y0hScGIyNXpLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaHpiM1Z5WTJVZ1BUMDlJQ2QyYVhKMGRXRnNPbVZ1ZEhKNUp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUFuWEZ3d0p5QXJJSE52ZFhKalpWeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdiRzloWkNocFpDd2diM0IwYVc5dWN5a2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2FXUWdQVDA5SUNkY1hEQjJhWEowZFdGc09tVnVkSEo1SnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmdaWGh3YjNKMElHUmxabUYxYkhRZ2UzMWdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDBzWEc0Z0lDQWdmU3hjYmlBZ1hTeGNiaUFnWW5WcGJHUTZJSHRjYmlBZ0lDQnliMnhzZFhCUGNIUnBiMjV6T2lCN1hHNGdJQ0FnSUNCcGJuQjFkRG9nSjNacGNuUjFZV3c2Wlc1MGNua25MRnh1SUNBZ0lIMHNYRzRnSUgwc1hHNTlLVnh1WEc1bWRXNWpkR2x2YmlCMFpYTjBSWEp5YjNJb0tTQjdYRzRnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduVkdWemRHbHVaeUJGY25KdmNpY3BYRzU5WEc0aVhTd0tJQ0FpYldGd2NHbHVaM01pT2lBaU8wRkJRWGxaTEZOQlFWTXNiMEpCUVc5Q08wRkJSWFJoTEVsQlFVOHNiVU5CUVZFc1lVRkJZVHRCUVVGQkxFVkJRekZDTEZOQlFWTTdRVUZCUVN4SlFVTlFPMEZCUVVFc1RVRkRSU3hOUVVGTk8wRkJRVUVzVFVGRFRpeFZRVUZWTEUxQlFVMHNTVUZCU1N4VFFVRlRPMEZCUXpOQ0xHdENRVUZWTzBGQlFVRXNUVUZEV2p0QlFVRkJMRWxCUTBZN1FVRkJRU3hKUVVOQk8wRkJRVUVzVFVGRFJTeE5RVUZOTzBGQlFVRXNUVUZEVGl4VlFVRlZMRkZCUVZFc1ZVRkJWU3hUUVVGVE8wRkJRMjVETEZsQlFVa3NWMEZCVnl4cFFrRkJhVUk3UVVGRE9VSXNhVUpCUVU4c1QwRkJUenRCUVVGQkxGRkJRMmhDTzBGQlFVRXNUVUZEUmp0QlFVRkJMRTFCUTBFc1MwRkJTeXhKUVVGSkxGTkJRVk03UVVGRGFFSXNXVUZCU1N4UFFVRlBMRzFDUVVGdFFqdEJRVU0xUWl4cFFrRkJUenRCUVVGQkxGRkJRMVE3UVVGQlFTeE5RVU5HTzBGQlFVRXNTVUZEUmp0QlFVRkJMRVZCUTBZN1FVRkJRU3hGUVVOQkxFOUJRVTg3UVVGQlFTeEpRVU5NTEdWQlFXVTdRVUZCUVN4TlFVTmlMRTlCUVU4N1FVRkJRU3hKUVVOVU8wRkJRVUVzUlVGRFJqdEJRVU5HTEVOQlFVTTdRVUZGUkN4VFFVRlRMRmxCUVZrN1FVRkRia0lzVVVGQlRTeEpRVUZKTEUxQlFVMHNaVUZCWlR0QlFVTnFRenNpTEFvZ0lDSnVZVzFsY3lJNklGdGRDbjBLCg==:8:9)
    at file:///home/hiroshi/code/others/vite/node_modules/.pnpm/rollup@4.20.0/node_modules/rollup/dist/es/shared/node-entry.js:19892:40

image

In order to handle this, we'll probably need to customize Error.prepareStackTrace.

@bluwy
Copy link
Member

bluwy commented Oct 24, 2024

I'm personally not very comfortable with using a global function to handle the dynamic imports, and the stack trace issue also feels like a can of worms. We're switching tradeoffs than might open up issues for a different set of users.

It's a bit unfortunate that runtimes until now don't provide the utilites we need to load config files. But maybe there's still some other things we could do:

  1. Use tsx to load the config, but since it doesn't work with deno or bun, we'll use the old method for them. However there's also the risk that it's using experimental node loader APIs.
  2. Or we add a flag to simply import() the config with no processing, no file tracking, no recursive caching, and let the runtime handle any js/ts transformations.
  3. Or support installing tsx or ts-node or something else and Vite will automatically use it where possible.

@hi-ogawa
Copy link
Collaborator Author

I agree and personally stacktrace is a huge blocker since people iterate plugins development inside bundled config and see errors coming from there. I wanted to test out Error.prepareStackTrace idea at least, but I don't think it's so promising either since it can conflict with others (at least vitest, vite-node and new module runner does it). I'll close put this PR for now.

@hi-ogawa hi-ogawa closed this Oct 25, 2024
@hi-ogawa hi-ogawa deleted the fix-config-without-tempfile branch October 25, 2024 08:31
@silverwind
Copy link

It's a bit unfortunate that runtimes until now don't provide the utilites we need to load config files

Node can import() Typescript when process.features.typescript is truthy. Bun and Deno can do it natively. I suppose one could write a function that does runtime detection and use the native method when possible, with a fallback to the temp file method.

@bluwy
Copy link
Member

bluwy commented Nov 2, 2024

They don't have a way to disable the cache recursively and track the files loaded to be watched for changes, so not really a 1:1 feature parity with the current config loading approach. It might not be crucial for some folks though hence I was working on a flag to enable direct import, but with the other PR now merged there isn't a strong usecase now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
4 participants