Laravel、Vue - "You may need an appropriate loader"用于模板标签

标签 laravel vue.js webpack vue-loader

我目前正在使用 Laravel 和 Vue 构建一个 Web 应用程序。我得到的错误是针对我拥有的所有组件。

ERROR in ./resources/assets/js/components/App 1:0
Module parse failed: Unexpected token (1:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
> <template>
|     <div id="layout-wrapper">
|         <app-topbar></app-topbar>
 @ ./resources/assets/js/app.js 6:0-35 41:11-14
 @ multi ./resources/assets/js/app.js ./resources/assets/sass/style.scss
App.vue 文件如下所示:
<template>
    <div id="layout-wrapper">
        <app-topbar></app-topbar>
        <app-menu></app-menu>

        <div class="main-content">
            <div class="page-content">
                <router-view></router-view>
                <app-footer></app-footer>
            </div>
        </div>
    </div>
</template>

<script>
    import AppTopbar from './_partials/AppTopbar'
    import AppMenu from './_partials/AppMenu'
    import AppFooter from './_partials/AppFooter'
    import Users from './users/Users'
    import Dashboard from './dashboard/Dashboard'

    export default {
        components: {
            'app-topbar': AppTopbar,
            'app-menu': AppMenu,
            'app-footer': AppFooter,
            Users,
            Dashboard,
        },
        beforeMount() {
            axios.get('/metadata')
                .then(response => {
                    window.Laravel = {
                        response: response,
                        current_year: response.current_year,
                        csrf: response.csrf,
                        asset(path){
                            return this.response.asset+'/'+path;
                        },
                        trans(text){
                            return this.response.trans[text];
                        },
                        route(name){
                            return this.response.base_url+'/'+this.response.routes[name];
                        }
                    };
                });
        },
    }
</script>
从错误中,我了解到问题在于 标签没有被解析。根据我的发现,我需要它们的 vue-loader 和 vue-template-compiler 依赖项。我已经安装了这些,但是,我仍然不断收到这些错误。
我还发现尝试 vue-loader 的旧版本(当前 15.x.x ,旧 14.x.x )可能会有所帮助,但没有。
我的版本是:
拉拉维尔 8.12.3
npm 6.14.4
package.json 依赖项:
"devDependencies": {
        "axios": "^0.19",
        "cross-env": "^7.0",
        "laravel-mix": "^5.0.1",
        "lodash": "^4.17.19",
        "resolve-url-loader": "^3.1.0",
        "sass": "^1.29.0",
        "sass-loader": "^8.0.2",
        "vue-template-compiler": "^2.6.12"
    },
    "dependencies": {
        "vue": "^2.6.12",
        "vue-loader": "^14.2.4",
        "vue-router": "^3.4.9"
    }
由于我对Vue不熟练,所以我明白我做错了什么。但是,我还没有在网上找到解决方案。所以,我想请求你的帮助。

更新:
因为 Laravel 有一个预配置的 webpack.config 文件,所以我想我可以向你展示。
webpack.mix.js :
const mix = require('laravel-mix');

/*
 |--------------------------------------------------------------------------
 | Mix Asset Management
 |--------------------------------------------------------------------------
 |
 | Mix provides a clean, fluent API for defining some Webpack build steps
 | for your Laravel applications. By default, we are compiling the CSS
 | file for the application as well as bundling up all the JS files.
 |
 */

mix.sass('resources/assets/sass/style.scss', 'public/assets')
    .js('resources/assets/js/app.js', 'public/js')

    .styles([
        // Layout
        'resources/assets/template/system/css/bootstrap.min.css',
        'resources/assets/template/system/css/icons.min.css',
        'resources/assets/template/system/css/app.min.css',
        // Data Table
        'resources/assets/template/system/css/dataTables.bootstrap4.min.css',
        'resources/assets/template/system/css/responsive.bootstrap4.min.css',
        // Custom
        'public/assets/style.css'
    ], 'public/css/style.min.css')

    .scripts([
        // Layout
        'resources/assets/template/system/js/jquery.min.js',
        'resources/assets/template/system/js/bootstrap.bundle.min.js',
        'resources/assets/template/system/js/metisMenu.min.js',
        'resources/assets/template/system/js/simplebar.min.js',
        'resources/assets/template/system/js/waves.min.js',
        'resources/assets/template/system/js/jquery.sparkline.min.js',
        'resources/assets/template/system/js/morris.min.js',
        'resources/assets/template/system/js/raphael.min.js',
        'resources/assets/template/system/js/app.js',
        // Data Tables
        'resources/assets/template/system/js/jquery.dataTables.min.js',
        'resources/assets/template/system/js/dataTables.bootstrap4.min.js',
        'resources/assets/template/system/js/dataTables.responsive.min.js',
        'resources/assets/template/system/js/responsive.bootstrap4.min.js',
        // Vue
        //'resources/assets/template/system/js/vue.js',
        // Custom
        //'resources/assets/js/vue.js',
        'public/js/app.js',
        'resources/assets/js/script.js'
    ], 'public/js/script.min.js');

最佳答案

在 Laravel 8 中, Assets 的编译方式略有不同。如果您声明要在 webpack.mix.js 中编译 vue 文件,它只会添加 vue 编译器作为依赖项。

看看我这样做后发生了什么:http://prntscr.com/whr7wv

尝试改变.js('resources/assets/js/app.js', 'public/js').js('resources/assets/js/app.js', 'public/js').vue()如果成功返回发布。

注意:考虑不使用 laravel/ui 并手动创建 app.js

关于Laravel、Vue - "You may need an appropriate loader"用于模板标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65009751/

相关文章:

php - 带有可选子路径的 Laravel 路由

vue.js - 为什么 Prop 更改不会更改数据?

vue.js - 在 Vue CLI 3 项目中使用自定义 Bootstrap SASS 的步骤是什么?

node.js - 设置用于开发的 Angular 通用应用程序

php - 失败时在 laravel 中填充旧的 html 选择字段

javascript - 如何在 Laravel 中显示每月的产品销量

ios - 获取 Laravel JSON feed 中帖子的页码

javascript - Vee-validate 无法使用 Nuxt.js 和 Vuetify 处理范围

css - 在 CSS 中使用图像 url 时,React 应用程序编译失败

reactjs - Next JS config 多插件配置