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

Open
wants to merge 16 commits into
base: main
Choose a base branch
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/[email protected]/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/[email protected]/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.

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