微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

更改从延迟加载的 VueJS 组件中提取的 CSS 的位置

如何解决更改从延迟加载的 VueJS 组件中提取的 CSS 的位置

我使用 VueJS 2 和 vue-custom-element 进行延迟加载,如下所示:

Vue.customElement('nav-icon',() => new Promise((resolve) => {
    require(['./NavIcon.vue'],(lazyComponent) => resolve(lazyComponent.default));
}),{
    beforeCreateVueInstance
});

这样我就可以将 JS 和 CSS 上传到 Shopify 主题并使用 <nav-icon> 显示自定义组件。

一切正常,除了在我的主要入口点 JS 文件中,CSS 文件的块的名称以及它们所在的路径是错误的。

在我的 configureWebpack 文件vue.config.js 部分中,我的输出设置如下:

output: {
    filename: '[name].js',chunkFilename: 'my-prefix-[name].js'
}

这适用于 JS 文件

我有一个用于 pluginsMiniCssExtractPlugin 条目,它重命名了磁盘上的结果 CSS 文件

new MiniCssExtractPlugin({
    filename: '[name].css',chunkFilename: 'my-prefix-[name].css'
})

但这不会更新入口点 JavaScript 中的名称(它们缺少“my-prefix-”),因此当请求时,它们都是 404..!

在入口点 JavaScript 中,它们也在 css/ 文件夹下被请求,我无法使用。

我该怎么做:

A) 正确重命名 CSS 块,以便磁盘文件名以及入口点 JavaScript 中请求的内容匹配

B) 更改入口点 JavaScript 认为它们所在的 css/ 路径。我不能使用子文件夹,因为 Shopify 主题资产不支持文件夹,一切都必须是顶级

如果我手动编辑生成的入口点文件删除 css/ 路径并设置正确的名称,它们会按预期工作并正常加载。但显然这很乏味且不可扩展..

谢谢!

解决方法

原来我忽略了 Vue CLI docs 的一部分,您可以在其中将对象传递给 extract

如果您想进一步配置此插件的确切功能,您还可以为 mini-css-extract-plugin 传递一个选项对象,而不是 true

所以使用(在 cssvue.config.js 部分):

extract: {
    filename: '[name].css',chunkFilename: 'prefix-chunk-[contenthash].css'
}

同样在 MiniCssExtractPlugin 选项和 Webpack output 选项中,我能够让所有磁盘文件名和入口点加载器函数中的文件名匹配。

>

感谢 VueJS Discord 服务器上的 @benyuanzhang 指出。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。