Vite + VueJS 3 + Bootstrap 5.2 -如何避免在所有VueJS组件中导入Bootstrap scss文件?

xoshrz7s  于 2023-04-21  发布在  Vue.js
关注(0)|答案(1)|浏览(230)

我目前正在使用Vite和Bootstrap 5.2构建一个VueJS 3应用程序,我想在我的一些组件中使用reakpoint mixin,但我无法在所有组件中导入bootstrap .scss文件。
我想只导入一次,并且能够在整个代码中使用所有的引导函数/mixin。

This is what I have already tried (none of them worked for me):

1. Add `bootstrap` file import to `css > preProcessors > scss > additionalData` `vite.config.js` settings:

//vite.config.js

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'

export default defineConfig({
  server: {
    port: 8080
  },
  resolve: {
    alias: {
      '@': path.resolve(__dirname, './src'),
      find: '@vue/runtime-core',
      replacement: '@vue/runtime-core/dist/runtime-core.esm-bundler.js',
      '~bootstrap': path.resolve(__dirname, 'node_modules/bootstrap')
    }
  },
  plugins: [vue()],
  css: {
    preprocessorOptions: {
      scss: {
        additionalData: `@import "~bootstrap/scss/bootstrap";`
      }
    }
  }
})

1.创建一个./src/assets/styles.scss文件,将bootstrap导入其中并将其添加到css > preProcessors > scss > additionalDatavite.config.js设置中:

// vite.config.js (rest of settings equal to the one above)
css: {
    preprocessorOptions: {
      scss: {
        additionalData: `@import "./src/assets/styles.scss";`
      }
    }
  }

./src/assets/styles.scss

@import "~bootstrap/scss/bootstrap";

1.在main.js文件中导入相同的./src/assets/styles.scss文件
1.在main.js中导入bootstrap文件
我还有一个问题:如果我做了唯一起作用的事情,即在我想要的每个Vue组件上导入bootstrap文件:它会影响性能,因为(据我所知) Bootstrap 将完全导入所有的时间?
我非常乐意分享该项目的任何其他细节,以试图得到一些答案。

w51jfk4q

w51jfk4q1#

我的解决方案是将./node_modules/bootstrap/scss/mixins/_breakpoints.scss文件的内容复制到一个自定义的./src/styles/_mixins.scss文件中,并将以下内容添加到文件的顶部:

$grid-breakpoints: (
  xs: 0,
  sm: 576px,
  md: 768px,
  lg: 992px,
  xl: 1200px,
  xxl: 1400px
);

如果没有这个,mixin文件就不会知道$grid-breakpoints。如果你已经设置了bootstrap来使用自定义断点,那么就复制(或@use '...' as *)它们。
使用示例:

<template>
  <div class="test"> test </div>
</template>

<style scoped lang="scss">
@use '@/styles/mixins' as mx;

.test {
  @include mx.media-breakpoint-down(lg) {
    color: red;
  }
}
</style>

我认为这是目前存在的最佳解决方案之一。

相关问题