如何解决NPM模块的CSS不适用于@ vue / web-component-wrapper VueJS Webcomponents
在使用@ vue / web-component-wrapper开发Vue Web组件时,不会应用npm_modules的样式。实际上根本没有加载CSS。 这是我的 main.js :
import Vue from 'vue';
import wrap from '@vue/web-component-wrapper';
import App from './App.vue';
import '@/modules/filters';
import '@fortawesome/fontawesome-free/css/all.css';
import '@fortawesome/fontawesome-free/js/all';
const wrappedElement = wrap(Vue,App);
window.customElements.define('hello-there',wrappedElement);
在此之前,我遇到了问题,即使我的普通CSS也没有应用。我通过以下问题的答案解决了这个问题:Styling not applied to vue web component during development
甚至main.js中的那些导入样式:
import '@fortawesome/fontawesome-free/css/all.css';
根本不会加载。
首先想到的是-> Webpack css-loader / vue-style-loader出了问题
这是我的 vue.config.js (使用上述问题的解决方法):
function enableShadowCss(config) {
const configs = [
config.module.rule('vue').use('vue-loader'),config.module.rule('css').oneOf('vue-modules').use('vue-style-loader'),config.module.rule('css').oneOf('vue').use('vue-style-loader'),config.module.rule('css').oneOf('normal-modules').use('vue-style-loader'),config.module.rule('css').oneOf('normal').use('vue-style-loader'),config.module.rule('postcss').oneOf('vue-modules').use('vue-style-loader'),config.module.rule('postcss').oneOf('vue').use('vue-style-loader'),config.module.rule('postcss').oneOf('normal-modules').use('vue-style-loader'),config.module.rule('postcss').oneOf('normal').use('vue-style-loader'),config.module.rule('scss').oneOf('vue-modules').use('vue-style-loader'),config.module.rule('scss').oneOf('vue').use('vue-style-loader'),config.module.rule('scss').oneOf('normal-modules').use('vue-style-loader'),config.module.rule('scss').oneOf('normal').use('vue-style-loader'),config.module.rule('sass').oneOf('vue-modules').use('vue-style-loader'),config.module.rule('sass').oneOf('vue').use('vue-style-loader'),config.module.rule('sass').oneOf('normal-modules').use('vue-style-loader'),config.module.rule('sass').oneOf('normal').use('vue-style-loader'),config.module.rule('less').oneOf('vue-modules').use('vue-style-loader'),config.module.rule('less').oneOf('vue').use('vue-style-loader'),config.module.rule('less').oneOf('normal-modules').use('vue-style-loader'),config.module.rule('less').oneOf('normal').use('vue-style-loader'),config.module.rule('stylus').oneOf('vue-modules').use('vue-style-loader'),config.module.rule('stylus').oneOf('vue').use('vue-style-loader'),config.module.rule('stylus').oneOf('normal-modules').use('vue-style-loader'),config.module.rule('stylus').oneOf('normal').use('vue-style-loader'),];
configs.forEach((c) =>
c.tap((options) => {
options.shadowMode = true;
return options;
})
);
}
module.exports = {
chainWebpack: (config) => {
enableShadowCss(config);
},configureWebpack: {
output: {
libraryExport: 'default',},resolve: {
symlinks: false,module: {
rules: [
{
test: /\.ya?ml$/,use: 'raw-loader',sideEffects: true,],css: {
extract: false,loaderOptions: {
sass: {
additionalData: `@import "@/styles/_variables.scss";`,};
所以我尝试通过以下方式手动将css-loader / vue-style-loader添加到Webpack:
chainWebpack: (config) => {
enableShadowCss(config);
config.module
.rule('css')
.test(/\.css$/)
.use('css-loader')
.loader('css-loader')
.end();
},
也许这些样式现在已经加载,但是无论如何构建都会抛出语法错误:
./node_modules/@fortawesome/fontawesome-free/css/all.css
Syntax Error: CssSyntaxError
(1:4) /Users/.../node_modules/@fortawesome/fontawesome-free/css/all.css UnkNown word
> 1 | // style-loader: Adds some css to the DOM by adding a <style> tag
| ^
2 |
3 | // load the styles
我知道我知道,这似乎很明显,但是这些行根本没有出现在文件中。也许在导入的文件中。
不使用wc-wrapper,一切正常! 好吧...无论如何我不知道下一步该怎么做。我是webpack和Vue的新手!
如果有人有想法,我将不胜感激!
欢呼
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。