Nuxt и Ag Grid выдают SyntaxError. Отсутствуют кадры стека. - PullRequest
0 голосов
/ 07 мая 2019

Попытка добавить ag-grid в приложение nuxt.

Я следовал инструкциям https://www.ag -grid.com / вю-получение стартером / а также Как использовать ag-grid в приложении Nuxt

  • Добавлены стили в nuxt.config.js
  • Сделал плагин и включен в nuxt.config.js
  • Создан компонент AgGridDemo.vue
  • Включение компонента в страницу index.vue

Примечание. Пожалуйста, не пытайтесь запускать фрагменты, так как я использовал их только для обмена имеющимся у меня источником.

Мой файл nuxt.config.js

require('dotenv').config()
import pkg from './package'

export default {
  mode: 'universal',

  /*
   ** Headers of the page
   */
  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' }]
  },

  /*
   ** Customize the progress-bar color
   */
  loading: { color: '#fff' },

  /*
   ** Global CSS
   */
  css: [
    { src: '~assets/bulma-modifications.scss', lang: 'scss' },
    { src: 'font-awesome/scss/font-awesome.scss', lang: 'scss' },
    { src: '~/node_modules/ag-grid-community/dist/styles/ag-grid.css',  lang: 'css' },
    { src: '~/node_modules/ag-grid-community/dist/styles/ag-theme-dark.css',  lang: 'css' }
  ],

  /*
   ** Plugins to load before mounting the App
   */
  plugins: [
    {
      src: '~/plugins/plugin-ag-grid.js',
      ssr: false
    },
    {
      src: '~plugins/plugin-vue-chartjs.js',
      ssr: false
    }
  ],

  /*
   ** Nuxt.js modules
   */
  modules: [
    // Doc: https://axios.nuxtjs.org/usage
    '@nuxtjs/axios',
    // Doc: https://buefy.github.io/#/documentation
    'nuxt-buefy',
    '@nuxtjs/pwa',
    '@nuxtjs/dotenv'
  ],
  /*
   ** Axios module configuration
   */
  axios: {
    // See https://github.com/nuxt-community/axios-module#options
  },

  /*
   ** Build configuration
   */
  build: {
    /*
     ** You can extend webpack config here
     */
    extend(config, ctx) {
      config.resolve.alias['vue'] = 'vue/dist/vue.common'
      // Run ESLint on save
      if (ctx.isDev && ctx.isClient) {
        config.module.rules.push({
          enforce: 'pre',
          test: /\.(js|vue)$/,
          loader: 'eslint-loader',
          exclude: /(node_modules)/
        })
      }
      config.node = {
        fs: 'empty'
      }
    }
  },
  env: {
    baseUrl: process.env.BASE_URL || 'http://localhost:3000'
  }
}

Мой плагин plugin-ag-grid.js:

import * as agGridEnterpise from 'ag-grid-enterprise/main'
require('dotenv').config()
agGridEnterpise.LicenseManager.setLicenseKey([process.env.AG_LICENSE_KEY])

Мой компонент AgGridDemo.vue:

<template>
  <ag-grid-vue
    style="width: 500px; height: 500px;"
    class="ag-theme-balham"
    :columnDefs="columnDefs"
    :rowData="rowData"
  ></ag-grid-vue>
</template>
<script>
import { AgGridVue } from 'ag-grid-vue'

export default {
  name: 'AgGridDemo',
  data() {
    return {
      columnDefs: null,
      rowData: null
    }
  },
  components: {
    AgGridVue
  },
  beforeMount() {
    this.columnDefs = [
      { headerName: 'Make', field: 'make' },
      { headerName: 'Model', field: 'model' },
      { headerName: 'Price', field: 'price' }
    ]

    this.rowData = [
      { make: 'Toyota', model: 'Celica', price: 35000 },
      { make: 'Ford', model: 'Mondeo', price: 32000 },
      { make: 'Porsche', model: 'Boxter', price: 72000 }
    ]
  }
}
</script>

Наконец-то моя страница:

<template>
  <section class="section">
    Welcome to test page
    <aggriddemo></aggriddemo>
  </section>
</template>
<script>

import AgGridDemo from '~/components/AgGridDemo'
export default {
  name: 'IndexPage',
  components: {
    AgGridDemo
  }
}
</script>

Я получаю сообщение об ошибке на экране, но не на консоли, консоль говорит, что скомпилировано успешно, но на экране появляется сообщение:

Синтаксическая ошибка отсутствует

стек кадров

enter image description here

Есть идеи о том, почему это происходит и как это исправить?

Ответы [ 2 ]

1 голос
/ 07 мая 2019

Во-первых, хотя эта ошибка, скорее всего, и не вызовет этой ошибки, компонент в вашем шаблоне должен быть в кебаб-кейсе. <ag-grid-demo/>. Из vue документы

Ошибка, которую вы получаете, вероятно, связана с ssr, и хотя вы указали ssr: false в вашем nuxt.config.js, это не всегда помогает понять причину.

Не могли бы вы попробовать это:

<template>
  <section class="section">
    Welcome to test page
    <no-ssr>
      <ag-grid-demo></ag-grid-demo>
    </no-ssr>
  </section>
</template>

<script>
let AgGridDemo = {}
if (process.browser) {
  AgGridDemo = require('~/components/AgGridDemo')
}
export default {
  components: {
    'ag-grid-demo': AgGridDemo
  }
}
</script>

Кроме того, современный способ импорта плагинов в nuxt.config.js заключается в следующем.

plugins: [
  '~/plugins/plugin-ag-grid.client.js'
  //Note the .client.js This is shorthand for the following which you can also use
  src: { '~/plugins/plugin-ag-grid.js', mode: client }
]

Использование ssr: false будет устаревшим в следующем основном выпуске. См документы

Редактировать

Если это все еще вызывает ошибки, вам может понадобиться добавить плагин к build-transpile в nuxt.config.js. Вот так:

build: {
  ...
  transpile: [
    '/plugins',
  ],
 }

Это перенесет все ваши плагины, но посмотрим, как вы пойдете. К сожалению, документы не дают нам много об этом.

Если вы не можете заставить это работать, старомодный подход заключался в добавлении компонента в белый список, например:

//nuxt.config.js
const nodeExternals = require('webpack-node-externals')

module.exports = {
  /*
  ** All other config code
  */
  build: {
    extend(config, ctx) {
      if (ctx.isServer) {
        config.externals = [
          nodeExternals({
            whitelist: [/^@components\\AgGridDemo.vue/] 
            // or however you regex a windows path
          })
        ]
      }
    }
  }
}
0 голосов
/ 29 мая 2019

Попробовав каждое решение, приведенное здесь (спасибо за публикацию), мне удалось визуализировать ag-grid в пустом проекте с использованием тега и динамического импорта (поясняется минута 7:40)как это сделать, если вы не знакомы с разделением кодов, я настоятельно рекомендую посмотреть все видео) динамический импорт видео .

Как я туда попал?Ну, так как Эндрю написал, что проблема может иметь какое-то отношение к ssr, я переключил свой проект nuxt в режим: 'spa' и BOOM!ag-grid-vue появился.Теперь проблема заключалась в том, что многие из моих возможностей в значительной степени основаны на ssr.Поэтому мне пришлось заставить его работать в режиме srr, но теперь я знаю, что ag-grid-vue полностью доступна на стороне клиента, поэтому я переключился обратно в режим: ssr и сделал следующее:

Примечание. Пожалуйста, не пытайтесь запускать фрагменты, поскольку я использовал их только для обмена имеющимся у меня источником.

Мой agGridDemo.vue

<template>
  <ag-grid-vue
    style="width: 500px; height: 500px;"
    class="ag-theme-balham"
    :columnDefs="columnDefs"
    :rowData="rowData"
  ></ag-grid-vue>
</template>
<script>
import { AgGridVue } from 'ag-grid-vue'

export default {
  name: 'ag-grid-demo',
  data() {
    return {
      columnDefs: null,
      rowData: null
    }
  },
  components: {
    AgGridVue
  },
  beforeMount() {
    this.columnDefs = [
      { headerName: 'Make', field: 'make' },
      { headerName: 'Model', field: 'model' },
      { headerName: 'Price', field: 'price' }
    ]

    this.rowData = [
      { make: 'Toyota', model: 'Celica', price: 35000 },
      { make: 'Ford', model: 'Mondeo', price: 32000 },
      { make: 'Porsche', model: 'Boxter', price: 72000 }
    ]
  }
}
</script>

<style lang="scss">
  @import "~/node_modules/ag-grid-community/dist/styles/ag-grid.css";
  @import "~/node_modules/ag-grid-community/dist/styles/ag-theme-balham.css";
</style>

Здесь нет ничего нового, я думаю, только то, что импорт таблиц стилей в файле nuxt.config.js сделал таблицы стилей недоступными (по крайней мере, в моем случае).Поэтому я добавил тег

...