TLDR:有没有人知道一种优雅的方法来确保组件将自己的<style>{...everything in ./dist/vue-COMPONENT_NAME.css}</style>
元素注入页面,但只有一次? SSR还友好吗?
我已经在寻找一个好的解决方案了2天以上了;我正构建一个可能被大多数非构建的客户端环境使用的Vue组件,通过脚本标记包含在页面中:
<script src="https://unpkg.com/vue-COMPONENT_NAME/dist/vue-COMPONENT_NAME.js"></script>
而且,通常您只需使用链接标记来获取样式:
<link rel="stylesheet" href="https://unpkg.com/vue-COMPONENT_NAME/dist/vue-COMPONENT_NAME.css">
..但我想删除将额外的(可能已忘记的)链接标记添加到页面的要求。我希望这个组件能够自动将所需的样式注入到页面中,因此它永远不会以非样式状态显示。
这是一个使用Canvas进行显示的以图形为中心的组件,它的一些内部逻辑是在分析顶级DOM节点的clientBoundingRect
的基础上构建的 - 因此具有在mount时设置其大小和比例的样式是必要的。
我也计划通过Nuxt自己使用这个组件,所以我必须确保无论遇到什么解决方案都避免了可怕的"The client-side rendered virtual DOM tree is not matching server-rendered content."
错误消息。
到目前为止,我一直很喜欢使用vue-cli
进行构建的低配置:
vue build vue-COMPONENT_NAME.vue --prod --lib VueCOMPONENT
...但它的输出始终是两个文件:
./dist/vue-COMPONENT_NAME.js
./dist/vue-COMPONENT_NAME.css
是否有vue-cli
的参数或配置参数会导致它将样式构建为./dist/vue-COMPONENT_NAME.js
?有没有人用vue-cli
做过这样的事情?