如何从 nuxt.js 的 assets 文件夹中导入 css 文件

Posted

技术标签:

【中文标题】如何从 nuxt.js 的 assets 文件夹中导入 css 文件【英文标题】:How to import css file from assets folder in nuxt.js 【发布时间】:2020-06-02 08:00:34 【问题描述】:
<template>
  <div class="container">
    <head>
      <link rel="stylesheet" href="~assets/css/style-light.css" />
      <link rel="stylesheet" href="~assets/css/login-light.css" />
    </head>
  </div>
</template>

像上面那样导入 css 会导致这个错误

vue.runtime.esm.js:5717 GET http://localhost:3000/~assets/css/login-light.css net::ERR_ABORTED 404 (Not Found)

除了把整个css放到模板里,真的没有别的办法加载css了吗?

【问题讨论】:

每页只能有一个head 元素。它不能驻留在body 中。除此之外,它可能会起作用,但该指定路径中不存在 CSS。 【参考方案1】:

您需要知道的第一件事是,您不能在任何地方声明 html 头,无论是在您的模板中,还是在您的组件中,无论是在您的页面中,还是在任何地方。

请记住,您不能为此使用 html 标签,您将使用 json 架构。

查看https://nuxtjs.org/guide/configuration 以获得更详细的说明。

现在你怀疑是否要全局导入 CSS,正确的位置是在你的 nuxt.config.js 中,在这个文件中,你有一个名为 head 的属性,在 head 中我们将配置所有导入.

所以,在 nuxt.config.js 中找到你的 head session,然后创建一个名为 css 的新属性,如下所示:

   head: 
     css: [
       '~/assets/style/app.styl',
       '~/assets/style/main.css'
     ],
   
   ...

另一种方法是直接在组件中导入你的 CSS,为此你可以这样做:

        <style scoped>
        @import '~/assets/style/main.css';
        </style>
    OR
        <style scoped src="@/assets/styles/mystyles.css">
        </style>

在 Nuxt 中,您还需要在应用程序中安装 CSS 加载器,因此请确保您已在应用程序中安装了“stylus”和“stylus-loader”。

【讨论】:

很有趣,你能帮我们试试这个吗? 另外一件事,你有没有安装css loader?在这里我安装了这两个包:“stylus”:“^0.54.7”和“stylus-loader”:“^3.0.2”。【参考方案2】:

尝试在脚本中导入你的 css 文件:

<script>
import "@/assets/css/style-light.css";
import "@/assets/css/login-light.css";

/// 

</script>

编辑:将 ~ 更改为 @

【讨论】:

现在我得到了这个找不到模块'~assets/css/style-light.css' 用@/代替~ 我得到了这个错误:无法解析'normalize.css' 当然可以@HenriqueVanKlaveren,看看这个codesandbox.io/s/… 现在在 Nuxt 中使用 head() 函数会导致我现在在某些页面上出现奇怪的失败,所以我改用这种方法,因为它 100% 的时间都在工作。谢谢你的提示。【参考方案3】:

您可以像这样使用 head 方法将文件带入:

head () 
return 
  link: [
     rel: 'stylesheet', href: '/style-light.css' ,
     rel: 'stylesheet', href: '/login-light.css' 
  ]
 

您还应该将这些 css 文件移动到静态文件夹中。在 Vue 论坛上查看此讨论 https://forum.vuejs.org/t/nuxt-import-css-file-and-js-file/42498

【讨论】:

什么时候应该使用静态,什么时候应该使用资产? 我认为你放入 assets 文件夹的 css 文件将由 webpack 编译,所以如果你使用任何预处理器,这将被转换为普通的旧 css。使用静态文件夹 webpack 不会触及此文件夹中的任何内容。 如果我有一堆纯 css 文件需要在特定页面中加载,您建议使用哪个? 我想这真的取决于“一堆”有多少。这些文件是否已经缩小等。它还取决于将在某些页面上加载哪些文件。如果它不是大量的代码并且它已经被缩小了,我认为将它们放入静态文件中应该没有问题。 你可能应该看看 Henriques 解决方案,老实说,我认为这是一种更好的方法!

以上是关于如何从 nuxt.js 的 assets 文件夹中导入 css 文件的主要内容,如果未能解决你的问题,请参考以下文章

nuxt入门

nuxt.js1-5

如何从 nuxt.js 页头的 node_modules 文件夹中引用 js 文件

如何在Nuxt.js项目的页面中包含CSS

Nuxt.js + vuetify 图像未加载

nuxt.js1-2