当前位置: 首页 > 知识库问答 >
问题:

javascript - vite如何提取公共的css文件?

石苏燕
2024-09-19

vite配置引入了公共的scss文件,打包后,每个css文件都重复引入了global.scss文件中的内容,如何提取出一个公共的css文件?

css: {
  preprocessorOptions: {
    scss: {
      additionalData: '@import "@/global.scss";',
      javascriptEnabled: true
    }
  }
}

共有1个答案

濮赤岩
2024-09-19

在 Vite 中,当你使用 preprocessorOptionsadditionalData 来全局引入 SCSS 文件时,确实可能会导致每个组件或页面的 CSS 输出中都包含这些全局样式。为了避免这种情况,并提取出一个单独的公共 CSS 文件,你可以使用 Vite 的插件系统或构建配置来优化你的 CSS 输出。

不过,Vite 本身并没有直接提供像 Webpack 的 MiniCssExtractPlugin 那样的插件来直接提取公共 CSS。但是,你可以通过以下方法来尝试解决这个问题:

方法 1: 使用 CSS 入口文件

你可以创建一个单独的 CSS 文件(例如 main.scss),并在其中 @import 所有的全局样式文件(包括 global.scss)。然后,在 Vite 配置中,你可以将 main.scss 作为 CSS 的入口文件,而不是在 preprocessorOptions 中使用 additionalData

步骤

  1. 创建一个 main.scss 文件,并在其中引入 global.scss 和其他需要的全局样式。

    // main.scss
    @import "@/global.scss";
    // 其他全局样式
  2. 修改你的 Vite 配置,不再使用 additionalData,而是将 main.scss 添加到你的入口文件中(如果是 Vue 项目,可以在 vite.config.js 中配置插件来自动引入)。

    对于非 Vue 项目,你可能需要在 HTML 文件中手动引入 main.scss 生成的 CSS 文件。

  3. 使用 Vite 的 CSS 代码分割(如果你正在使用 Vue,并且安装了 @vitejs/plugin-vue,它默认启用了 CSS 代码分割)。

方法 2: 使用第三方插件

虽然 Vite 没有内置的插件来直接提取公共 CSS,但你可以查找是否有第三方插件实现了这一功能。例如,有些社区插件可能模仿了 Webpack 的 MiniCssExtractPlugin 的行为。

方法 3: 自定义 Rollup 插件

如果你需要更高级的自定义,你可以通过编写自己的 Rollup 插件来直接控制 CSS 的打包过程。这涉及到对 Rollup 和 Vite 插件系统的深入了解。

结论

对于大多数情况,使用 CSS 入口文件(方法 1)应该是最简单和最直接的方法。这可以确保全局样式只被包含一次,并且可以在构建过程中被有效地管理和优化。如果你需要更复杂的 CSS 管理,考虑使用第三方插件或编写自定义 Rollup 插件。

 类似资料:
  • 项目是vite+ts,但是css module不知道怎么实现。 比如下面这种常规的css module写法,在vite中要怎么配置才能实现。 vite官网关于css module是404 https://vitejs.cn/config/shared-options.html#css-modules

  • npm install extract-text-webpack-plugin --save-dev 简单的方法 requires vue-loader@^12.0.0 and webpack@^2.0.0 // webpack.config.js var ExtractTextPlugin = require("extract-text-webpack-plugin") module.exp

  • 将所有Vue组件中的所有已处理的CSS解压缩到单个CSS文件中示例配置: Webpack 2.x npm install extract-text-webpack-plugin@2.x --save-dev // webpack.config.js var ExtractTextPlugin = require("extract-text-webpack-plugin") module.exp

  • 有没有一种方法可以在Google Drive中使用API获得标记为公共查看的文件,而不需要验证? 我知道“downloadURL”属性,但它是一个临时URL,没有引用它的持续时间。我想直接使用API来获取文件,我想我在某处读到有人暗指有可能调用未通过身份验证的API来检索公共文件。

  • 问题内容: 我在HTML中有一些代码例如 如果我使用以下CSS代码进行样式设置: 问题是:如何防止和隔离mydiv div标签内的标签,使其免受公共标签样式的影响? 问题答案: CSS层叠和继承级别3介绍了速记属性和该关键字,这一起,让您方便地实现这一目标。 例如,如果作者在元素上指定,它将阻止所有继承并重置所有属性,就像级联的作者,用户或用户代理级别中没有规则一样。 这对于不希望继承外部页面样式

  • vite如何导入静态.js文件呢?因为我的项目是monorepo架构的,其中有一个common包被其他vue项目所公共引用,然后这个common包里需要动态加载一些.js、.json文件,如何才能在common包放入这些静态文件并直接导入?我试了函数中使用import可以动态导入一些.json文件,但是对于.js文件导入不了。 之前是分别放在引入common的主项目下的public下,然后使用ax