unplugin-vue-ce icon indicating copy to clipboard operation
unplugin-vue-ce copied to clipboard

[BUG] - Style tags not added when using externals

Open wassim-ben-amor opened this issue 1 year ago • 7 comments

Describe the bug

Hello, When I try to make 'vue' as external in vite config in order to use importmaps:

rollupOptions: {
        external: ['vue', 'vue-router', 'vuex'],

I have found that the style tags are no more added to the DOM. I even don't find the keyword data-v-ce in the generated sources. In the provided reproduction link, I can not reproduce the issue as I couldn't replicate all the environment I have (transforming my vue3 app into a web component and using it in another container). I will try to create a full reproduction on a separate git repo.

I wanted to know if this is a known limitation ? Thank you,

Reproduction

https://stackblitz.com/edit/github-ajr7vy?file=vite.config.ts

System Info

No response

Used Package Manager

yarn

Validations

  • [X] Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
  • [X] Make sure this is a unplugin-vue-ce 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 instead.
  • [X] The provided reproduction is a minimal reproducible example of the bug.

wassim-ben-amor avatar Nov 20 '23 18:11 wassim-ben-amor

Fix this issue in StackBlitz Codeflow Start a new pull request in StackBlitz Codeflow.

stackblitz[bot] avatar Nov 20 '23 18:11 stackblitz[bot]

In the reproduction repository you provided, I noticed that you seem to want to import vue from CDN. Sorry, unplugin-vue-ce is not supported. Because the specific implementation code of unplugin-vue-ce comes from my own PR in vue/core, which is deeply bound to the vue runtime, but vue does not have a public method to deeply modify the runtime, so unplugin-vue- ce injects the implementation code into the vue runtime through compilation (as described in the README). Therefore, using vue from cdn is not supported

baiwusanyu-c avatar Nov 21 '23 01:11 baiwusanyu-c

@baiwusanyu-c , Thank you for the answer. Do you think we can we consider these potential workarounds:

  • Use yarn patch to edit vue/core to add the unplugin-vue-ce transformation, we can imagine hosting the patched version on a separate CDN (esm build).
  • Use rollup to build a custom version of vue/core that is handling unplugin-vue-ce transformation. And again host the generated esm file on a separate CDN.

Thank you,

wassim-ben-amor avatar Nov 21 '23 10:11 wassim-ben-amor

@baiwusanyu-c thanks for this cool repo! I also did not get that "inject" means that we need to have it at build time, maybe you can update the note banner in the repo to be more precise about that, and use terms like here with patch and does not work for externals etc.

~~Is there any way we can patch the lib ourself? Like just adding the plugin does not seem to work for me. In my setup I have a app that dynamically loads a lib which should use the ce feature.~~

EDIT: This seems to work, just was another thing that breaks not sure why yet :)

carlos22 avatar Dec 04 '23 10:12 carlos22

I also did not get that "inject" means that we need to have it at build time

Sorry to cause trouble to you, what I mean is that the plugin will modify the code content of vue during compilation to achieve the functions we want. This is actually risky, and I hope you can understand this. So it must be vite compiled.

baiwusanyu-c avatar Dec 06 '23 01:12 baiwusanyu-c

In theory, it is possible to use plugins combined with rollup to build and distribute a vue separately, but I have not tried it. All my projects build the vue runtime code directly into the final product.

baiwusanyu-c avatar Dec 06 '23 01:12 baiwusanyu-c

Yeah I got that now thank you very much :) What is the blocker to add this to vue itself? I know that patching it might fail on updates etc.

carlos22 avatar Dec 06 '23 15:12 carlos22