css - NuxtJS css 提取如何用于生成的静态网站?

标签 css vue.js leaflet nuxt.js

我正在尝试从 my (minimal) code 生成一个静态网站与 Nuxt。在该代码中,我特别集成了 tailwindcss 工具包以及 vue2-leaflet。在

nuxt generate

我有两个 css 文件,一个用于 tailwindcss css,另一个用于 leaflet css。虽然前一个文件很好并且包含我需要的一切,但后者非常稀疏:

.leaflet-tile-pane{z-index:200}@-webkit-keyframes leaflet-gestures-fadein{to{opacity:1}}@keyframes leaflet-gestures-fadein{0%{opacity:0}to{opacity:1}}

当然,这使得我的 map 以一种非常奇怪的方式呈现,因为大部分 css 都丢失了。这是我当前的 nuxt.config.js:

module.exports = {
  mode: 'universal',

  head: {
    title: pkg.name,
    meta: [
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      { hid: 'description', name: 'description', content: pkg.description }
    ],
    link: [
      { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }
    ]
  },

  css: [
  ],

  plugins: [
    { src: '~plugins/leaflet.js', mode: 'client' }
  ],

  buildModules: [
    '@nuxtjs/tailwindcss'
  ],

  modules: ['@nuxtjs/apollo', 'nuxt-purgecss', ['nuxt-i18n', i18n]],

  [...]

  build: {
    extractCSS: true,
  }
}

摆脱 extractCSS 最终将所有相关的 css 合并到 index.html 中。它有效,但随后出现以下错误:

ERROR  Webpack mode only works with build.extractCSS set to *true*. Either extract your CSS or use 'postcss' mode

我不确定我是否了解整个 CSS 提取的工作原理。有人可以启发我吗?为什么它不能与 extractCSS: true 一起使用?我怎样才能让它发挥作用?为什么它在SPA模式下工作,而在静态模式下不工作?

最佳答案

您正在使用 nuxt-purgecss 正在使用 purgecss去除未使用的 CSS。

purgecss扫描 HTML(或 Vue)文件以查找正在使用的 CSS 类,然后从最终的 CSS 包中删除未使用的类。

你可以看看默认purgecss nuxt-purgecss 使用的配置here . paths列出路径 purgecss将扫描 CSS 使用情况。

因为您没有使用大部分 leaflet css 直接(在你的组件中),有必要配置 purgecss不要删除传单的 css。

你可以通过 whitelisting 做到这一点(顺便说一句,不确定“评论”方法是否适用于 Vue\Nuxt)

您可以阅读更多herehere

未测试!!

// nuxt.config.js
{
  purgeCSS: {
    whitelistPatterns: [/leaflet/, /marker/]
  }
}

关于错误信息

错误信息来自nuxt-purgecss模块 - 清楚地记录在案 here

我对 Nuxt 构建过程了解不深。所以我只是从 docs 假设那extractCSS: true将使用 extract-css-chunks-webpack-plugin将所有 CSS 提取到单独的 CSS 文件,同时(默认)extractCSS: false将使用 PostCSS提取所有 CSS 并将其直接放入 <style>渲染页面的标签。

恕我直言,所有这些都无关紧要,因为根本问题在于使用 purgecss解决方案是将其正确配置为白名单 leaflet CSS 类....

关于css - NuxtJS css 提取如何用于生成的静态网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59734096/

相关文章:

javascript - Zara的产品图片功能

html - 无法选择具有 :not() and :first-child 组合的元素

Vue.js 渲染 v-bind :style background-image url with custom computed property does not work

leaflet - 如何将纬度/经度转换为 GridLayer Tile 中的正确像素位置

leaflet - 在传单js的搜索框中选择地址后获取地址详细信息

html - 在布局中针对不同的移动版本

jquery - 从 json 动态加载数据时,克隆表标题列宽和原始 tbody 列宽未对齐

node.js - 尝试同时运行(npm ERR!代码 ELIFECYCLE npm ERR!)

leaflet - 无法在Vue组件中显示leaflet.js map

javascript - 在 jQuery Mobile 面板中显示 geoJSON 属性