You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Nova自定义工具Vue编译报错:Cannot read properties of undefined (reading '_c')

解决方案

1. 复用Nova的Vue实例,避免重复打包

Laravel Nova自身已集成Vue 2,自定义工具无需打包独立的Vue副本,修改工具根目录下的webpack.mix.js,添加外部依赖配置:

const mix = require('laravel-mix');
const webpack = require('webpack');

mix.js('resources/js/tool.js', 'dist/js')
    .vue({ version: 2 })
    .sass('resources/sass/tool.scss', 'dist/css')
    .webpackConfig({
        externals: {
            vue: 'Vue',
            'vue-template-compiler': 'VueTemplateCompiler'
        },
        plugins: [
            new webpack.DefinePlugin({
                'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV)
            })
        ]
    });

执行以下命令重新构建:

rm -rf node_modules package-lock.json
npm install
npm run dev

2. 统一vue-loader版本

工具与父项目的vue-loader版本存在细微差异(工具15.10.2,父项目15.9.6),修改工具的package.json,将vue-loader版本对齐父项目:

"devDependencies": {
    // 其他依赖保持不变
    "vue-loader": "^15.9.6"
}

重新安装依赖并构建工具。

3. 检查工具入口文件的组件注册

确保工具的resources/js/tool.js正确注册组件,名称需与NovaServiceProvider中配置的路径一致:

import Tool from './components/Tool';

Nova.booting((app, store) => {
    app.component('admin-agenda', Tool);
});

比如你在NovaServiceProvider中注册的工具路径是admin-agenda,组件名就必须和这个字符串完全匹配。

4. 调整Vue编译选项

修改工具的webpack.mix.js,添加Vue编译选项,避免模板编译冲突:

mix.js('resources/js/tool.js', 'dist/js')
    .vue({
        version: 2,
        options: {
            compilerOptions: {
                preserveWhitespace: false
            }
        }
    })
    .sass('resources/sass/tool.scss', 'dist/css');

5. 清理全链路缓存

  • Laravel端缓存清理:
    php artisan cache:clear
    php artisan config:clear
    php artisan view:clear
    
  • 浏览器端:清空缓存或使用无痕模式访问Nova面板

内容的提问来源于stack exchange,提问作者Koen Dekker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 18:44:51