首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony Encore (Pimcore) + Vuetify

Symfony Encore (Pimcore) + Vuetify
EN

Stack Overflow用户
提问于 2021-03-07 12:39:11
回答 1查看 372关注 0票数 1

我现在被安可困住了:(

Stack

Pimcore 6.8.10

Symfony 4.4

webpack-安可-包: 1.11.1

vue 2.6

变相2.4.5

摘要

我正在尝试将vuetify组件添加到我已经在工作的项目中。不幸的是,vue加载并可以像往常一样使用(目前我只使用一些自定义组件)。但在这里似乎有点不愿意加入。也许我只是瞎了..。

问题

尽管我在vuetify.js中添加了v图标和v容器(据我所知,它们不应该是必要的),但这些在FE:控制台错误中是不被识别的。

V图标错误:

代码语言:javascript
复制
[Vue warn]: Error in render: "TypeError: vm.$vuetify.icons is undefined"

V容器错误:

代码语言:javascript
复制
[Vue warn]: Unknown custom element: <v-container>

(我只知道会在这里引起问题,所以我使用这些元素进行测试。在HTML中,它们只是经常被使用:<v-icon>mdi-home</v-icon> )

Afaik,这些应该被正确地定义为虚荣。

这或多或少给了我"vuetify不是恰当实例化“的概念。但是为什么呢?

进一步注意到

到目前为止我用的是纱线,没有任何问题。yarn encore dev --watch在这里不会抛出任何错误

下面是我目前使用的配置:webpack.config.js:

代码语言:javascript
复制
    let Encore = require('@symfony/webpack-encore');
    const VuetifyLoaderPlugin = require('vuetify-loader/lib/plugin');
    
    
    if (!Encore.isRuntimeEnvironmentConfigured()) {
        Encore.configureRuntimeEnvironment(process.env.NODE_ENV || 'dev');
    }
    
    
    // Setting if hashes are being used here
    let toVar;
    if (Encore.isProduction()) {
        toVar = 'images/[path][name].[hash:8].[ext]'
    } else {
        toVar = 'images/[path][name].[ext]'
    }
    
    
    Encore
        .setOutputPath('web/build/')
        .setPublicPath('/build')
        .copyFiles({
            from: './assets/images',
            to: toVar
        })
        .addEntry('app', './assets/app.js')
        .splitEntryChunks()
        .enableSingleRuntimeChunk()
        .cleanupOutputBeforeBuild()
        .enableBuildNotifications()
        .enableSourceMaps(!Encore.isProduction())
        .enableVersioning(Encore.isProduction())
        .configureBabelPresetEnv((config) => {
            config.useBuiltIns = 'usage';
            config.corejs = 3;
        })
        .enableSassLoader()
        .enableTypeScriptLoader()
        .enableVueLoader(() => {}, {
            runtimeCompilerBuild: false
        })
        .addPlugin(new VuetifyLoaderPlugin())
    
    module.exports = Encore.getWebpackConfig();

app.js:

代码语言:javascript
复制
import Vue from 'vue/dist/vue'
import './scss/app.scss'
import vuetify from "./js/plugins/vuetify";

// Custom components
import HeaderComponent from "./js/components/HeaderComponent"
import FooterComponent from "./js/components/FooterComponent";
import UserQuickInfoLoggedInComponent from "./js/components/UserQuickInfoLoggedInComponent";
import UserQuickInfoLoggedOutComponent from "./js/components/UserQuickInfoLoggedOutComponent";
import StoryDetailOnOverviewComponent from "./js/components/StoryDetailOnOverviewComponent";
import StoryOnOverviewComponent from "./js/components/StoryOnOverviewComponent";
import StoryDetailOnDetailComponent from "./js/components/StoryDetailOnDetailComponent";
import UserSubscriptionComponent from "./js/components/UserSubscriptionComponent";
import SubscribeComponent from "./js/components/SubscribeComponent";
import ErrorComponent from "./js/components/async/ErrorComponent";
import SuccessComponent from "./js/components/async/SuccessComponent";
import BreadcrumbComponent from "./js/components/BreadcrumbComponent";

const App = new Vue({
    vuetify,
    components: {
        'header-component': HeaderComponent,
        'footer-component': FooterComponent,
        'user-quick-info-logged-in-component': UserQuickInfoLoggedInComponent,
        'user-quick-info-logged-out-component': UserQuickInfoLoggedOutComponent,
        'story-detail-on-overview-component': StoryDetailOnOverviewComponent,
        'story-on-overview-component': StoryOnOverviewComponent,
        'story-detail-on-detail-component': StoryDetailOnDetailComponent,
        'user-subscription-component': UserSubscriptionComponent,
        'subscribe-component': SubscribeComponent,
        'error-component': ErrorComponent,
        'success-component': SuccessComponent,
        'breadcrumb-component': BreadcrumbComponent
    }
})

// Create the App & mount it

App.$mount('#app-root')

export default App

vuetify.js:

代码语言:javascript
复制
// assets/js/plugins/vuetify.js

import Vue from 'vue'
import Vuetify, {
    VIcon,
    VContainer
} from 'vuetify/lib'
import {
    Ripple
} from 'vuetify/lib/directives'
import '@mdi/font/css/materialdesignicons.css'

Vue.use(Vuetify)
import 'vuetify/dist/vuetify.min.css'

export default new Vuetify({
    icons: {
        iconfont: 'mdi', // default - only for display purposes
    },
    components: {
        'v-icon': VIcon,
        'v-container': VContainer
    },
    directives: {
        Ripple,
    },
})

(谢谢您的帮助:)

最好的,本特

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-09 22:23:56

对于那些有类似问题的人:我找到了一个解决办法。

如问题中所示,正如我的IDE所建议的那样,我是从'vuetify/lib‘和'vue/dist/vue’导入的,我在web上的常见文章中也发现了这一点。虽然我没有经验,但我没怎么想过。

那么,解决方案是什么:

In app.js:

Vue from 'vue/dist/vue'导入import Vue from 'vue'

In vuetify.js:\

代码语言:javascript
复制
import Vuetify, {
    VIcon,
    VContainer
} from 'vuetify/lib'

import {
    Ripple
} from 'vuetify/lib/directives'

代码语言:javascript
复制
import Vuetify, {
    VIcon,
    VContainer
} from 'vuetify'

import {
    Ripple
} from 'vuetify'

谢谢你留下来!

干杯,本特

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66516605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档