将 bootstrap.css 包含到 nuxt 项目的最佳方法是啥?
Posted
技术标签:
【中文标题】将 bootstrap.css 包含到 nuxt 项目的最佳方法是啥?【英文标题】:What is best way for including bootstrap.css to nuxt project?将 bootstrap.css 包含到 nuxt 项目的最佳方法是什么? 【发布时间】:2018-06-06 16:28:33 【问题描述】:这是我的 nuxt.config.js 文件的一部分:
head:
link: [
rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' ,
// load bootsttrap.css from CDN
// type: 'text/css', rel: 'stylesheet', href: '//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css' ,
]
,
css: [
// this line include bootstrap.css in each html file on generate
'bootstrap/dist/css/bootstrap.css',
'assets/main.css'
],
在这种情况下,bootstrap.css 包含在 nuxt generate 上的每个 html 文件中。 为了解决它,我在 css 部分中注释行 'bootstrap/dist/css/bootstrap.css' 并在链接部分中取消注释 rel stylesheet 行。
在此 bootstrap.css 文件从 CDN 加载且未包含在 html 文件中之后。所以,我认为这不是一个好主意。
如何在构建时将 bootstrap.css 从 'node_modules/bootstrap/dist/...' 复制到 '~/assets',然后从这里加载?
【问题讨论】:
【参考方案1】:将 bootstrap.css 包含到 nuxt 项目中的步骤:
1 .安装 bootstrap-vue
npm i bootstrap-vue
2.创建文件 plugins/bootstrap-vue.js 并在其中输入:
/* eslint-disable import/first */
import Vue from 'vue'
import BootstrapVue from 'bootstrap-vue'
Vue.use(BootstrapVue)
import 'bootstrap/dist/css/bootstrap.css'
import 'bootstrap-vue/dist/bootstrap-vue.css'
3.将创建的插件添加到nuxt.config.js:
plugins: [
'@/plugins/bootstrap-vue',
],
完成这些步骤后,它应该可以工作了,您可以使用引导程序。
【讨论】:
【参考方案2】:对我来说,如果你使用 scss 是最好的方法
至于我,我在 nuxt 的 assets
目录中创建了一个 sass
目录。
然后我在我刚刚创建的sass
目录中添加app.scss
文件。
然后在app.scss
中导入以下内容:
@import "bootstrap-variable-override";
@import "~bootstrap/scss/bootstrap.scss";
那我就yarn add node-sass sass-loader --save
在 nuxt.config.js
之后,我修改 css 数组以包含我的 app.scss
css: [
'@/assets/sass/app.scss'
],
这将编译我将在 app.scss 中编写和导入的任何 scss,并作为编译后的 css 提供。
但如果您是 bootstrap-vue,那么您需要做的就是将其添加为模块:
modules: ['bootstrap-vue/nuxt']
【讨论】:
@import "bootstrap-variable-override";为我抛出了一个错误。删除,它就像一个魅力【参考方案3】:使用 nuxt.js 添加 Bootstrap 5 的方法:
如果您不想通过阅读以下答案手动执行此操作,您可以简单地使用 nuxt 样板存储库克隆我的 bootstrap 5,click here。
安装
npm install bootstrap@next
注意:命令会改变,目前bootstrap 5是beta版。
安装好bootstrap之后,你就会知道需要安装一些loader来编译Bootstrap。
npm install --save-dev sass sass-loader fibers postcss postcss-loader autoprefixer
注意:bootstrap 文档中没有提到安装 Fibers,但是安装 Fibers 时会自动启用与 sass 的同步编译(速度提高 2 倍)。
添加Bootstrap的CSS部分和自定义的Bootstrap
首先,在 nuxt 项目的 assets 文件夹中创建一个文件夹,并在创建的文件夹中创建一个 scss 文件。假设文件夹的名称是 bootstrap,文件名是‘mystyle.scss’。现在,在这个 mystyle.scss 文件中,您可以覆盖任何内置的自定义 Bootstrap 变量。
但是你还需要在这个mystyle.scss中导入bootstrap样式。之后,你需要下面一行来导入bootstrap样式
@import "~bootstrap/scss/bootstrap";
注意:确保将其导入 .scss 文件的最后一行。
导入引导样式后,需要编辑nuxt.config.js
export default
css: [ src: '~/assets/bootstrap/mystyle.scss', lang: 'sass'
],
这不仅会编译覆盖的引导样式,还会在整个 nuxt 项目中添加引导样式。
添加 Bootstrap 的 javascript 部分
首先,下载引导程序。您将在下载的文件夹上获得一个 css 和一个 js 文件夹。这两个文件夹下有很多文件。 我们只需要 js 文件夹中的一个文件。该文件的名称是 bootstrap.bundle.min.js。复制该“bootstrap.bundle.min.js”文件并将该文件粘贴到您的 nuxt 项目的 static 文件夹中。然后你需要编辑你的 nuxt.config.js 来使用它。
export default
script: [
src: '/bootstrap.bundle.min.js',
]
就是这样,享受吧!
您可以在我的中篇文章click here 中详细了解它。
【讨论】:
【参考方案4】:这是我发现在 Nuxt.js 项目中包含 常规 Bootstrap 版本(not Bootstrap-Vue)的最简单方法。首先,从你的 Nuxt.js 项目目录安装 Bootstrap(我使用的是 5.0.0-beta2 版本):
npm install bootstrap
然后,在nuxt.config.js
文件中,像这样包含 Bootstrap 的 CSS 和 Javascript:
css: [
"~/node_modules/bootstrap/dist/css/bootstrap.min.css"
],
plugins: [
src: "~/node_modules/bootstrap/dist/js/bootstrap.bundle.min.js", mode: "client"
],
注意 mode: "client"
标志,它表示 Javascript 只能在客户端上运行。这可以防止由于 Bootstrap 与服务器端渲染不兼容而发生 ReferenceError: document is not defined
错误。
【讨论】:
【参考方案5】:就我而言,我将 bootstrap.css 文件放在“static”文件夹中,然后将其注册到 nuxt.config.js,如下所示
head:
title: "Nuxt",
meta: [
charset: "utf-8" ,
name: "viewport", content: "width=device-width, initial-scale=1" ,
hid: "description",
name: "description",
content: "Nuxt"
],
link: [
rel: "icon", type: "image/x-icon", href: "/favicon.ico" ,
rel: "stylesheet", href: "/css/bootstrap.css" //Register your static asset
]
,
【讨论】:
【参考方案6】:这是我的设置,适合那些喜欢自定义引导默认样式的人:
在我的assets/styles/_bootstrap.scss
中,我已经导入了所需的样式:
@import "~bootstrap/scss/functions";
@import "~bootstrap/scss/variables";
@import "~bootstrap/scss/mixins";
//@import "~bootstrap/scss/root";
@import "~bootstrap/scss/reboot";
@import "~bootstrap/scss/type";
//@import "~bootstrap/scss/images";
//@import "~bootstrap/scss/code";
@import "~bootstrap/scss/grid";
//@import "~bootstrap/scss/tables";
@import "~bootstrap/scss/forms";
@import "~bootstrap/scss/buttons";
@import "~bootstrap/scss/transitions";
//@import "~bootstrap/scss/dropdown";
//@import "~bootstrap/scss/button-group";
//@import "~bootstrap/scss/input-group";
//@import "~bootstrap/scss/custom-forms";
//@import "~bootstrap/scss/nav";
//@import "~bootstrap/scss/navbar";
//@import "~bootstrap/scss/card";
//@import "~bootstrap/scss/breadcrumb";
//@import "~bootstrap/scss/pagination";
//@import "~bootstrap/scss/badge";
//@import "~bootstrap/scss/jumbotron";
//@import "~bootstrap/scss/alert";
//@import "~bootstrap/scss/progress";
//@import "~bootstrap/scss/media";
//@import "~bootstrap/scss/list-group";
@import "~bootstrap/scss/close";
@import "~bootstrap/scss/modal";
//@import "~bootstrap/scss/tooltip";
//@import "~bootstrap/scss/popover";
@import "~bootstrap/scss/carousel";
@import "~bootstrap/scss/utilities";
//@import "~bootstrap/scss/print";
以防万一您想更改引导程序的默认样式,然后我创建了assets/styles/_bootstrap-variables.scss
:
你可以在node-modules/bootstrap/scss/variables.scss
中找到很多变量,我只是改变了一些。
@import url('https://fonts.googleapis.com/css?family=Cabin:400,500,700');
$font-family-cabin: 'Cabin', sans-serif;
$font-family-base: $font-family-cabin;
$primary: #b62f20;
$secondary: #e8e8e9;
$success: #87b4a6;
$info: #f0f6fc;
//$warning: #faeecf;
//$danger: $red !default;
//$light: $gray-100 !default;
//$dark: $gray-800 !default;
并将我所有其他样式和插件导入一个文件assets/styles/main.scss
:
@import "bootstrap-variables"; // this should alway be on top
@import "bootstrap";
@import "my-other-style";
最后,将样式表导入layouts/default.vue
<template lang="pug">
div
nuxt
</template>
<style lang="scss">
@import '../assets/styles/main';
</style>
【讨论】:
【参考方案7】:如果您希望将 CSS 导入(特别是从 node_modules 引导,在您的情况下)集中到单个文件中以生成 Nuxt,您可以在“assets/main.css”中包含规则导入(建议将其更新为配置中指定的“~/assets/main.css”。
@import '../node_modules/bootstrap/dist/css/bootstrap.css'
提醒一下:当您在开发模式下简单地运行 Nuxt 时,CSS 将通过 JS 注入。然而,在生成时,Nuxt 将创建一个单独的、散列的 CSS 文件作为文档根目录的一部分。
【讨论】:
我应该把这一行放在我的代码的什么地方?当我将它粘贴到 nuxt.config.js 或 pages/index.vue 时,我收到错误“语法错误:意外令牌(3:0)”它的符号 '@' 如果我从行首删除 '@' 我得到另一个错误“未找到此相关模块:” 粘贴到 assets/main.css 我按照你说的做了,但它对我不起作用。详情见问题更新。谢谢! @MikaS,我更新了我的问题,并在此帖子评论之后。但现在我没有看到我的问题更新。版主可能会删除它吗? @tolyan 您尝试编辑此答案,而不是您自己的问题。修改未获批准,这就是您看不到它的原因。【参考方案8】:在我的例子中,我将它作为对象条目从 CDN 添加到 link
数组(在 nuxt.config.js 中)
link: [
rel: 'stylesheet', type: 'text/css', href: 'https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css'
]
【讨论】:
【参考方案9】:你安装 bootstrap-vue :
yarn add bootstrap-vue
然后在 nuxt.config.js 文件中添加一个模块,以及用于导入图标的单独配置:
modules: ['bootstrap-vue/nuxt'],
bootstrapVue:
icons: true // Install the IconsPlugin (in addition to BootStrapVue plugin
就是这样。 有关更多配置,请阅读此处的文档:https://bootstrap-vue.org/docs (读到它处理nuxt的中间)
【讨论】:
【参考方案10】:我用于 Bootstrap v5
nuxt.config.js
css: [
'~/assets/scss/main.scss',
],
styleResources:
scss: [
'~/node_modules/bootstrap/scss/_functions.scss',
'~/node_modules/bootstrap/scss/_variables.scss',
'~/node_modules/bootstrap/scss/_mixins.scss',
'~/node_modules/bootstrap/scss/_containers.scss',
'~/node_modules/bootstrap/scss/_grid.scss'
]
,
modules: [
'@nuxtjs/style-resources',
],
@nuxtjs/style-resources 在组件中提供 mixins、变量、网格: https://www.npmjs.com/package/@nuxtjs/style-resources 示例:
<style scoped lang="scss">
.header
@include make-container();
</style>
main.scss
@import "bootstrap-configuration";
@import "bootstrap-optional";
@import "@/node_modules/bootstrap/scss/helpers";
@import "@/node_modules/bootstrap/scss/utilities/api";
@import "custom";
_bootstrap-configuration.scss
@import "bootstrap-required";
@import "@/node_modules/bootstrap/scss/utilities";
_bootstrap-optional.scss (我只能包含我想要的内容)
@import "@/node_modules/bootstrap/scss/root";
@import "@/node_modules/bootstrap/scss/reboot";
@import "@/node_modules/bootstrap/scss/type";
@import "@/node_modules/bootstrap/scss/images";
@import "@/node_modules/bootstrap/scss/containers";
@import "@/node_modules/bootstrap/scss/grid";
@import "@/node_modules/bootstrap/scss/tables";
@import "@/node_modules/bootstrap/scss/forms";
@import "@/node_modules/bootstrap/scss/buttons";
@import "@/node_modules/bootstrap/scss/transitions";
@import "@/node_modules/bootstrap/scss/dropdown";
@import "@/node_modules/bootstrap/scss/button-group";
@import "@/node_modules/bootstrap/scss/nav";
@import "@/node_modules/bootstrap/scss/navbar";
@import "@/node_modules/bootstrap/scss/card";
@import "@/node_modules/bootstrap/scss/accordion";
@import "@/node_modules/bootstrap/scss/breadcrumb";
@import "@/node_modules/bootstrap/scss/pagination";
@import "@/node_modules/bootstrap/scss/badge";
@import "@/node_modules/bootstrap/scss/alert";
@import "@/node_modules/bootstrap/scss/progress";
@import "@/node_modules/bootstrap/scss/list-group";
@import "@/node_modules/bootstrap/scss/close";
@import "@/node_modules/bootstrap/scss/toasts";
@import "@/node_modules/bootstrap/scss/modal";
@import "@/node_modules/bootstrap/scss/tooltip";
@import "@/node_modules/bootstrap/scss/popover";
@import "@/node_modules/bootstrap/scss/carousel";
@import "@/node_modules/bootstrap/scss/spinners";
_custom.scss (这里我放了一些变量来覆盖 Bootstrap 和组件的自定义 css)
$theme-colors: (
"red": #cf142b,
"black": #000,
"tan": #e0d9c7,
"blue": #009eba,
"blue-light": #d6e3e6,
"blue-dark": #006985,
"red-dark": #7d212b,
);
@import
'mixins/mixins';
@import
'_base/colors',
'_base/typography',
'_base/headings';
@import
'components/_page-header',
'components/text-editor',
'components/content-with-side-image',
'components/featured-artists',
'components/video-player',
'components/audio-player',
'components/call-to-action',
'components/divider',
'components/tabs',
'components/image-gallery',
'components/logos',
'components/button',
'components/page-submenu',
'components/page-submenu-target';
我的想法来自 https://v5.getbootstrap.com/docs/5.0/customize/optimize/
【讨论】:
以上是关于将 bootstrap.css 包含到 nuxt 项目的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 npm 包中的 JS 文件包含到 Nuxt.js 中的单独页面
Laravel Mix 中的 Bootstrap-Vue CSS 编译
将 bootstrap.css 文件链接到 Play 框架中的 scala.html 页面
Nuxt.js:包含字体文件:使用 /static 或 /assets