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

Web Worker imports don't respect rollupOptions.output.assetFileNames on build #7613

Closed
tarngerine opened this issue Apr 4, 2022 · 7 comments · Fixed by #7804
Closed

Web Worker imports don't respect rollupOptions.output.assetFileNames on build #7613

tarngerine opened this issue Apr 4, 2022 · 7 comments · Fixed by #7804

Comments

@tarngerine
Copy link

Describe the bug

  • By default, building a Vite project generates [name].[hash].[ext]
  • Using rollupOptions.output.assetFileNames (and entry/chunkFileNames): [name].[ext] we can remove the hashing
  • However, this does not work for workers

Repro:

Expected:

  • All files without hash

Actual:

  • Workers are generated with a hash still

image

Reproduction

https://stackblitz.com/edit/vitejs-vite-wywvny?file=vite.config.js

System Info

envinfo doesn't work on Stackblitz, but whatever is the default from the linked `vanilla` example on Vite docs

Used Package Manager

npm

Logs

❯ vite build --debug
  vite:config bundled config file loaded in 233.10ms +0ms
  vite:config using resolved config: {
  vite:config   build: {
  vite:config     target: [ 'es2019', 'edge88', 'firefox78', 'chrome87', 'safari13.1' ],
  vite:config     polyfillModulePreload: true,
  vite:config     outDir: 'dist',
  vite:config     assetsDir: 'assets',
  vite:config     assetsInlineLimit: 4096,
  vite:config     cssCodeSplit: true,
  vite:config     cssTarget: [ 'es2019', 'edge88', 'firefox78', 'chrome87', 'safari13.1' ],
  vite:config     sourcemap: false,
  vite:config     rollupOptions: { output: [Object] },
  vite:config     minify: 'esbuild',
  vite:config     terserOptions: {},
  vite:config     write: true,
  vite:config     emptyOutDir: null,
  vite:config     manifest: false,
  vite:config     lib: false,
  vite:config     ssr: false,
  vite:config     ssrManifest: false,
  vite:config     reportCompressedSize: true,
  vite:config     chunkSizeWarningLimit: 500,
  vite:config     watch: null,
  vite:config     commonjsOptions: { include: [Array], extensions: [Array] },
  vite:config     dynamicImportVarsOptions: { warnOnError: true, exclude: [Array] }
  vite:config   },
  vite:config   configFile: '/home/projects/vitejs-vite-wywvny/vite.config.js',
  vite:config   configFileDependencies: [ '/home/projects/vitejs-vite-wywvny/vite.config.js' ],
  vite:config   inlineConfig: {
  vite:config     root: undefined,
  vite:config     base: undefined,
  vite:config     mode: undefined,
  vite:config     configFile: undefined,
  vite:config     logLevel: undefined,
  vite:config     clearScreen: undefined,
  vite:config     build: {}
  vite:config   },
  vite:config   root: '/home/projects/vitejs-vite-wywvny',
  vite:config   base: '/',
  vite:config   resolve: { dedupe: undefined, alias: [ [Object], [Object] ] },
  vite:config   publicDir: '/home/projects/vitejs-vite-wywvny/public',
  vite:config   cacheDir: '/home/projects/vitejs-vite-wywvny/node_modules/.vite',
  vite:config   command: 'build',
  vite:config   mode: 'production',
  vite:config   isWorker: false,
  vite:config   isProduction: true,
  vite:config   plugins: [
  vite:config     'vite:build-metadata',
  vite:config     'alias',
  vite:config     'vite:modulepreload-polyfill',
  vite:config     'vite:resolve',
  vite:config     'vite:html-inline-proxy',
  vite:config     'vite:css',
  vite:config     'vite:esbuild',
  vite:config     'vite:json',
  vite:config     'vite:wasm',
  vite:config     'vite:worker',
  vite:config     'vite:asset',
  vite:config     'vite:define',
  vite:config     'vite:css-post',
  vite:config     'vite:build-html',
  vite:config     'vite:worker-import-meta-url',
  vite:config     'vite:watch-package-data',
  vite:config     'commonjs',
  vite:config     'vite:data-uri',
  vite:config     'rollup-plugin-dynamic-import-variables',
  vite:config     'vite:asset-import-meta-url',
  vite:config     'vite:build-import-analysis',
  vite:config     'vite:esbuild-transpile',
  vite:config     'vite:terser',
  vite:config     'vite:reporter',
  vite:config     'vite:load-fallback'
  vite:config   ],
  vite:config   server: {
  vite:config     preTransformRequests: true,
  vite:config     fs: { strict: true, allow: [Array], deny: [Array] }
  vite:config   },
  vite:config   preview: {
  vite:config     port: undefined,
  vite:config     strictPort: undefined,
  vite:config     host: undefined,
  vite:config     https: undefined,
  vite:config     open: undefined,
  vite:config     proxy: undefined,
  vite:config     cors: undefined,
  vite:config     headers: undefined
  vite:config   },
  vite:config   env: { BASE_URL: '/', MODE: 'production', DEV: false, PROD: true },
  vite:config   assetsInclude: [Function: assetsInclude],
  vite:config   logger: {
  vite:config     hasWarned: false,
  vite:config     info: [Function: info],
  vite:config     warn: [Function: warn],
  vite:config     warnOnce: [Function: warnOnce],
  vite:config     error: [Function: error],
  vite:config     clearScreen: [Function: clearScreen],
  vite:config     hasErrorLogged: [Function: hasErrorLogged]
  vite:config   },
  vite:config   packageCache: Map(0) { set: [Function (anonymous)] },
  vite:config   createResolver: [Function: createResolver],
  vite:config   optimizeDeps: {
  vite:config     esbuildOptions: { keepNames: undefined, preserveSymlinks: undefined }
  vite:config   },
  vite:config   worker: {
  vite:config     format: 'iife',
  vite:config     plugins: [
  vite:config       [Object], [Object], [Object],
  vite:config       [Object], [Object], [Object],
  vite:config       [Object], [Object], [Object],
  vite:config       [Object], [Object], [Object],
  vite:config       [Object], [Object], [Object],
  vite:config       [Object], [Object], [Object],
  vite:config       [Object], [Object], [Object],
  vite:config       [Object], [Object], [Object],
  vite:config       [Object]
  vite:config     ],
  vite:config     rollupOptions: {}
  vite:config   }
  vite:config } +10ms
vite v2.9.1 building for production...
✓ 225 modules transformed.
✓ 229 modules transformed.
✓ 229 modules transformed. (x2)
✓ 229 modules transformed. (x3)
✓ 229 modules transformed. (x4)
transforming (413) node_modules/monaco-editor/esm/vs/e  vite:resolve 0.80ms ./codicon.ttf -> /home/projects/vitejs-vite-wywvny/node_modules/monaco-editor/esm/vs/base/browser/ui/codicons/codicon/codicon.ttf +0ms
✓ 823 modules transformed.
dist/assets/favicon.svg                 1.49 KiB
dist/assets/editor.worker.b9d8707e.js   167.17 KiB
dist/assets/json.worker.a1c2d8cf.js     292.94 KiB
dist/assets/codicon.ttf                 69.12 KiB
dist/assets/html.worker.e7c7cd44.js     603.25 KiB
dist/assets/css.worker.c8c9b503.js      901.42 KiB
dist/assets/ts.worker.576d5863.js       4781.45 KiB
dist/index.html                         0.43 KiB
dist/assets/abap.js                     14.07 KiB / gzip: 5.34 KiB
dist/assets/apex.js                     4.10 KiB / gzip: 1.86 KiB
dist/assets/azcli.js                    1.07 KiB / gzip: 0.45 KiB
dist/assets/bat.js                      2.04 KiB / gzip: 0.98 KiB
dist/assets/bicep.js                    2.72 KiB / gzip: 1.08 KiB
dist/assets/cameligo.js                 2.37 KiB / gzip: 1.07 KiB
dist/assets/clojure.js                  9.66 KiB / gzip: 3.65 KiB
dist/assets/coffee.js                   3.75 KiB / gzip: 1.41 KiB
dist/assets/cpp.js                      5.56 KiB / gzip: 2.20 KiB
dist/assets/csharp.js                   4.66 KiB / gzip: 1.82 KiB
dist/assets/csp.js                      1.63 KiB / gzip: 0.65 KiB
dist/assets/css.js                      4.64 KiB / gzip: 1.48 KiB
dist/assets/dart.js                     4.39 KiB / gzip: 1.73 KiB
dist/assets/dockerfile.js               2.07 KiB / gzip: 0.79 KiB
dist/assets/ecl.js                      5.46 KiB / gzip: 2.33 KiB
dist/assets/elixir.js                   9.77 KiB / gzip: 2.55 KiB
dist/assets/flow9.js                    2.01 KiB / gzip: 0.96 KiB
dist/assets/fsharp.js                   3.15 KiB / gzip: 1.42 KiB
dist/assets/freemarker2.js              16.38 KiB / gzip: 4.29 KiB
dist/assets/go.js                       2.83 KiB / gzip: 1.25 KiB
dist/assets/graphql.js                  2.45 KiB / gzip: 1.13 KiB
dist/assets/handlebars.js               6.84 KiB / gzip: 1.68 KiB
dist/assets/hcl.js                      3.75 KiB / gzip: 1.58 KiB
dist/assets/html.js                     4.95 KiB / gzip: 1.45 KiB
dist/assets/ini.js                      1.32 KiB / gzip: 0.66 KiB
dist/assets/java.js                     3.39 KiB / gzip: 1.50 KiB
dist/assets/javascript.js               1.13 KiB / gzip: 0.58 KiB
dist/assets/typescript.js               5.49 KiB / gzip: 2.21 KiB
dist/assets/julia.js                    7.29 KiB / gzip: 2.69 KiB
dist/assets/kotlin.js                   3.60 KiB / gzip: 1.57 KiB
dist/assets/less.js                     4.04 KiB / gzip: 1.52 KiB
dist/assets/lexon.js                    2.62 KiB / gzip: 1.04 KiB
dist/assets/lua.js                      2.31 KiB / gzip: 1.04 KiB
dist/assets/liquid.js                   4.09 KiB / gzip: 1.73 KiB
dist/assets/m3.js                       2.99 KiB / gzip: 1.41 KiB
dist/assets/markdown.js                 3.94 KiB / gzip: 1.48 KiB
dist/assets/mips.js                     2.76 KiB / gzip: 1.19 KiB
dist/assets/msdax.js                    5.04 KiB / gzip: 2.05 KiB
dist/assets/mysql.js                    11.23 KiB / gzip: 4.09 KiB
dist/assets/objective-c.js              2.59 KiB / gzip: 1.17 KiB
dist/assets/pascal.js                   3.17 KiB / gzip: 1.50 KiB
dist/assets/pascaligo.js                2.19 KiB / gzip: 1.03 KiB
dist/assets/perl.js                     8.30 KiB / gzip: 3.16 KiB
dist/assets/pgsql.js                    13.33 KiB / gzip: 4.50 KiB
dist/assets/php.js                      8.08 KiB / gzip: 2.15 KiB
dist/assets/pla.js                      1.88 KiB / gzip: 0.77 KiB
dist/assets/postiats.js                 7.91 KiB / gzip: 2.49 KiB
dist/assets/powerquery.js               16.78 KiB / gzip: 4.88 KiB
dist/assets/powershell.js               3.43 KiB / gzip: 1.47 KiB
dist/assets/protobuf.js                 9.07 KiB / gzip: 2.15 KiB
dist/assets/pug.js                      4.96 KiB / gzip: 1.74 KiB
dist/assets/python.js                   3.73 KiB / gzip: 1.66 KiB
dist/assets/qsharp.js                   3.10 KiB / gzip: 1.46 KiB
dist/assets/r.js                        3.30 KiB / gzip: 1.39 KiB
dist/assets/razor.js                    8.79 KiB / gzip: 2.34 KiB
dist/assets/redis.js                    3.71 KiB / gzip: 1.58 KiB
dist/assets/redshift.js                 11.76 KiB / gzip: 4.35 KiB
dist/assets/restructuredtext.js         4.04 KiB / gzip: 1.46 KiB
dist/assets/ruby.js                     8.54 KiB / gzip: 2.64 KiB
dist/assets/rust.js                     4.30 KiB / gzip: 1.91 KiB
dist/assets/sb.js                       2.03 KiB / gzip: 0.94 KiB
dist/assets/scala.js                    7.39 KiB / gzip: 2.17 KiB
dist/assets/scheme.js                   1.97 KiB / gzip: 0.93 KiB
dist/assets/scss.js                     6.50 KiB / gzip: 1.84 KiB
dist/assets/shell.js                    3.24 KiB / gzip: 1.31 KiB
dist/assets/solidity.js                 18.40 KiB / gzip: 4.47 KiB
dist/assets/sophia.js                   2.94 KiB / gzip: 1.31 KiB
dist/assets/sparql.js                   2.73 KiB / gzip: 1.27 KiB
dist/assets/sql.js                      10.30 KiB / gzip: 3.89 KiB
dist/assets/st.js                       7.46 KiB / gzip: 2.31 KiB
dist/assets/swift.js                    5.29 KiB / gzip: 2.15 KiB
dist/assets/systemverilog.js            7.67 KiB / gzip: 2.82 KiB
dist/assets/tcl.js                      3.73 KiB / gzip: 1.47 KiB
dist/assets/twig.js                     6.07 KiB / gzip: 1.62 KiB
dist/assets/vb.js                       5.90 KiB / gzip: 2.14 KiB
dist/assets/xml.js                      2.58 KiB / gzip: 1.06 KiB
dist/assets/yaml.js                     3.70 KiB / gzip: 1.33 KiB
dist/assets/cssMode.js                  32.69 KiB / gzip: 8.64 KiB
dist/assets/htmlMode.js                 33.43 KiB / gzip: 8.78 KiB
dist/assets/jsonMode.js                 38.79 KiB / gzip: 10.77 KiB
dist/assets/tsMode.js                   22.06 KiB / gzip: 6.27 KiB
dist/assets/index.css                   76.65 KiB / gzip: 13.15 KiB
dist/assets/index.js                    2632.11 KiB / gzip: 659.95 KiB

(!) Some chunks are larger than 500 KiB after minification. Consider:
- Using dynamic import() to code-split the application
- Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/guide/en/#outputmanualchunks
- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.


### Validations

- [X] Follow our [Code of Conduct](https://github.com/vitejs/vite/blob/main/CODE_OF_CONDUCT.md)
- [X] Read the [Contributing Guidelines](https://github.com/vitejs/vite/blob/main/CONTRIBUTING.md).
- [X] Read the [docs](https://vitejs.dev/guide).
- [X] Check that there isn't [already an issue](https://github.com/vitejs/vite/issues) that reports the same bug to avoid creating a duplicate.
- [X] Make sure this is a Vite issue and not a framework-specific issue. For example, if it's a Vue SFC related bug, it should likely be reported to https://github.com/vuejs/core instead.
- [X] Check that this is a concrete bug. For Q&A open a [GitHub Discussion](https://github.com/vitejs/vite/discussions) or join our [Discord Chat Server](https://chat.vitejs.dev/).
- [X] The provided reproduction is a [minimal reproducible example](https://stackoverflow.com/help/minimal-reproducible-example) of the bug.
@tarngerine tarngerine changed the title Web Worker imports don't respect rollupOptions.output.assetFileNames Web Worker imports don't respect rollupOptions.output.assetFileNames on build Apr 4, 2022
@famoser
Copy link

famoser commented Apr 5, 2022

Hi @tarngerine on StackBlitz the vite.config.js file seems missing (link: https://stackblitz.com/edit/vitejs-vite-wywvny?file=vite.config.js).

Did you mean it like this:

export default {
  build: {
    rollupOptions: {
      output: {
        assetFileNames: "[name].[ext]"
      }
    }
  }
}

@tarngerine
Copy link
Author

whoa, super weird. i've updated the project and it should be showing up now. thanks!

image

@tarngerine
Copy link
Author

were you able to repro @famoser ? thanks! https://stackblitz.com/edit/vitejs-vite-wywvny?file=vite.config.js

@bluwy
Copy link
Member

bluwy commented Apr 7, 2022

You can use worker.rollupOptions.output.assetFileNames to configure this. I wonder if it's safe to inherit the rollup options from build.rollupOptions though, seems like it could be confusing if we start to merge them (and potentially conflicting).

@famoser
Copy link

famoser commented Apr 7, 2022

@tarngerine I have a similar problem that assetFileNames is not applied in all (by myself) expected cases, but not exactly the same. As soon as I have a clean repro I'll probably create a new issue to avoid highjacking this one.

@famoser
Copy link

famoser commented Apr 12, 2022

You can use worker.rollupOptions.output.assetFileNames to configure this.

You mean like this: https://stackblitz.com/edit/vitejs-vite-p9bztw?file=vite.config.js
Because then it still appends the hash, seemingly ignoring the worker.rollupOptions.output config.

@famoser
Copy link

famoser commented Apr 13, 2022

I've looked into this a while now; there seem to be multiple issues like this.

Similar problems are unresolved with the legacy plugin: See #4628 and #6923. In at least one special case, specifically defining the naming of the polyfills-legacy.[hash].js file, the functionality is simply not implemented yet: The rollupOptions are not passed to build invoked in the legacy plugin:

format: name.includes('legacy') ? 'iife' : 'es',

In a local project of mine, without the legacy plugin & very similar config as the initial repro of this issue, the configuration option in rollupOptions.output.assetFileNames is respected (including for workers). I have not found an explanation for this so far.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants