2

I'm encountering some trouble building Gridsome with Vuetify.

According to https://gridsome.org/docs/assets-css/#vuetify, in order to use Vuetify with Gridsome you need to install vuetify and webpack-node-externals and modify

//main.js

import Vuetify from 'vuetify'
import 'vuetify/dist/vuetify.min.css'
import DefaultLayout from '~/layouts/Default.vue'

export default function (Vue, { appOptions, head }) {
  head.link.push({
    rel: 'stylesheet',
    href: 'https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css',
  })
  
  head.link.push({
    rel: 'stylesheet',
    href: 'https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900',
  });
  
  const opts = {} //opts includes, vuetify themes, icons, etc.
  Vue.use(Vuetify)
  
  appOptions.vuetify = new Vuetify(opts);
  
  // Set default layout as a global component
  Vue.component('Layout', DefaultLayout)
}

and gridsome.server.js

const nodeExternals = require('webpack-node-externals')

module.exports = function (api) {
  api.chainWebpack((config, { isServer }) => {
    if (isServer) {
      config.externals([
        nodeExternals({
          allowlist: [/^vuetify/]
        })
      ])
    }
  })

  api.loadSource(store => {
    // Use the Data store API here: https://gridsome.org/docs/data-store-api
  })
}

Gridsome build failed after gridsome.server.js is modified, and this is the error

PS E:\Dev\Projects\gridsome-vuetify-test> gridsome build
Gridsome v0.7.23

Initializing plugins...
Load sources - 0s
Create GraphQL schema - 0.03s
Create pages and templates - 0.03s
Generate temporary code - 0.04s
Bootstrap finish - 1.29s
Compile assets - 6.72s
Execute GraphQL (3 queries) - 0.01s
Could not generate HTML for "/about/":
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: E:\Dev\Projects\gridsome-vuetify-test\node_modules\@babel\runtime\helpers\esm\unsupportedIterableToArray.js
require() of ES modules is not supported.
require() of E:\Dev\Projects\gridsome-vuetify-test\node_modules\@babel\runtime\helpers\esm\unsupportedIterableToArray.js from E:\Dev\Projects\gridsome-vuetify-test\node_modules\vue-server-renderer\build.prod.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules.
Instead rename unsupportedIterableToArray.js to end in .cjs, change the requiring 
code to use import(), or remove "type": "module" from E:\Dev\Projects\gridsome-vuetify-test\node_modules\@babel\runtime\helpers\esm\package.json.

    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1080:13)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at E:\Dev\Projects\gridsome-vuetify-test\node_modules\vue-server-renderer\build.prod.js:1:77645
    at Object.YbeR (webpack:/external "@babel/runtime/helpers/esm/unsupportedIterableToArray":1:0)
    at __webpack_require__ (webpack/bootstrap:25:0)
    at Module.O/VM (assets/js/app.46242f68.js:1744:35)
    at __webpack_require__ (webpack/bootstrap:25:0)

Everything ran perfectly until I modified gridsome.server.js, I tried to look around but yet to find anything.

Dustin Le
  • 21
  • 2

0 Answers0