Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel webpack vue代码拆分延迟路由未进行版本控制_Laravel_Vue.js_Webpack_Routes_Code Splitting - Fatal编程技术网

Laravel webpack vue代码拆分延迟路由未进行版本控制

Laravel webpack vue代码拆分延迟路由未进行版本控制,laravel,vue.js,webpack,routes,code-splitting,Laravel,Vue.js,Webpack,Routes,Code Splitting,我正在从事一个Laravel+Vue SPA项目,我试图通过代码拆分和定义延迟路由来优化该项目,但现在没有对每个延迟路由文件进行版本控制 让我们看看我能否描述一下这个问题 您可以在这里看到主文件的版本:app.css,app.js,vendors.js。 但是users.js会发生什么呢?这是一条懒散的路线 app.blade.php <!doctype html> <html lang="ca_ES"> <head> <l

我正在从事一个Laravel+Vue SPA项目,我试图通过代码拆分和定义延迟路由来优化该项目,但现在没有对每个延迟路由文件进行版本控制

让我们看看我能否描述一下这个问题

您可以在这里看到主文件的版本:
app.css
app.js
vendors.js
。 但是
users.js会发生什么呢?这是一条懒散的路线

app.blade.php

<!doctype html>
<html lang="ca_ES">
<head>
    <link rel="manifest" href="/fullscreen-manifest.json">
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="csrf-token" content="{{ csrf_token() }}">

    <link rel="shortcut icon" href="{{ asset('favicon.png') }}">
    <link rel="dns-prefetch" href="//fonts.gstatic.com">
    <link href='https://fonts.googleapis.com/css?family=Roboto:100,300,500,700,900|Material+Icons' rel="stylesheet">
    <link href="{{ mix('css/app.css') }}" rel="stylesheet">
</head>
<body>
<div id="app"></div>
<script src="{{ mix('js/app.js') }}" defer></script>
<script src="{{ mix('vendors.js') }}" defer></script>
</body>
</html>
users.js

const home = () => import(/* webpackChunkName: "home" */ '@/pages/home');
const login = () => import(/* webpackChunkName: "home" */ '@/pages/auth/login');
const pageNotFound = () => import(/* webpackChunkName: "home" */ '@/pages/errors/404');
const pageForbidden = () => import(/* webpackChunkName: "home" */ '@/pages/errors/403');

import users from "./users";
import profile from "./profile";
(...)

export default [
    ...users,
    ...profile,
    (...)
    {
        path: '/',
        name: 'home',
        component: home,
        meta: {
            auth: true,
        }
    },
    {
        path: '/forbidden',
        name: '403',
        component: pageForbidden,
        meta: {
            auth: true,
        }
    },
    {
        path: '/login',
        name: 'login',
        component: login,
        meta: {
            guest: true,
        }
    },
    {
        path: '*',
        name: '404',
        component: pageNotFound,
    }
];
const users = () => import(/* webpackChunkName: "users" */ '@/pages/users/index');
const show = () => import(/* webpackChunkName: "users" */ '@/pages/users/show');

export default [
    {
        path: '/users',
        name: 'users',
        component: users,
        meta: {
            auth: true,
            admin: true,
        }
    },
    {
        path: '/show/:id',
        name: 'users.show',
        component: show,
        meta: {
            auth: true,
            admin: true,
        }
    },
];
const path = require('path');
const webpack = require('webpack');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const CompressionPlugin = require('compression-webpack-plugin');
const moment = require('moment');

module.exports = {
    output: {
        chunkFilename: '[name].js',
    },
    resolve: {
        extensions: ['.js', '.json', '.vue'],
        alias: {
            '@': path.join(__dirname, './resources/js'),
        }
    },
    plugins: [
        new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
        new BundleAnalyzerPlugin({
            analyzerMode: 'static',
            openAnalyzer: false,
            reportFilename: 'bundle-analyzer-plugin/reports/' + moment().format('YYYYMMDD') + '.html'
        }),
        new CompressionPlugin({
            filename: '[path].gz[query]',
            algorithm: 'gzip',
            test: /\.js$|\.css$|\.html$/,
            threshold: 10240,
            minRatio: 0.7
        }),
    ],
    optimization: {
        splitChunks: {
            cacheGroups: {
                commons: {
                    test: /[\\/]node_modules[\\/]/,
                    name: 'vendors',
                    chunks: 'all'
                }
            }
        }
    }
};
const config = require('./webpack.config');
const mix = require('laravel-mix');

mix.js('resources/js/app.js', 'public/js')
    .sass('resources/sass/app.scss', 'public/css')
    .sass('resources/sass/pdf.scss', 'public/css');

if (mix.inProduction()) {
    mix.version();
}

mix.webpackConfig(config);
webpack.config.js

const home = () => import(/* webpackChunkName: "home" */ '@/pages/home');
const login = () => import(/* webpackChunkName: "home" */ '@/pages/auth/login');
const pageNotFound = () => import(/* webpackChunkName: "home" */ '@/pages/errors/404');
const pageForbidden = () => import(/* webpackChunkName: "home" */ '@/pages/errors/403');

import users from "./users";
import profile from "./profile";
(...)

export default [
    ...users,
    ...profile,
    (...)
    {
        path: '/',
        name: 'home',
        component: home,
        meta: {
            auth: true,
        }
    },
    {
        path: '/forbidden',
        name: '403',
        component: pageForbidden,
        meta: {
            auth: true,
        }
    },
    {
        path: '/login',
        name: 'login',
        component: login,
        meta: {
            guest: true,
        }
    },
    {
        path: '*',
        name: '404',
        component: pageNotFound,
    }
];
const users = () => import(/* webpackChunkName: "users" */ '@/pages/users/index');
const show = () => import(/* webpackChunkName: "users" */ '@/pages/users/show');

export default [
    {
        path: '/users',
        name: 'users',
        component: users,
        meta: {
            auth: true,
            admin: true,
        }
    },
    {
        path: '/show/:id',
        name: 'users.show',
        component: show,
        meta: {
            auth: true,
            admin: true,
        }
    },
];
const path = require('path');
const webpack = require('webpack');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const CompressionPlugin = require('compression-webpack-plugin');
const moment = require('moment');

module.exports = {
    output: {
        chunkFilename: '[name].js',
    },
    resolve: {
        extensions: ['.js', '.json', '.vue'],
        alias: {
            '@': path.join(__dirname, './resources/js'),
        }
    },
    plugins: [
        new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
        new BundleAnalyzerPlugin({
            analyzerMode: 'static',
            openAnalyzer: false,
            reportFilename: 'bundle-analyzer-plugin/reports/' + moment().format('YYYYMMDD') + '.html'
        }),
        new CompressionPlugin({
            filename: '[path].gz[query]',
            algorithm: 'gzip',
            test: /\.js$|\.css$|\.html$/,
            threshold: 10240,
            minRatio: 0.7
        }),
    ],
    optimization: {
        splitChunks: {
            cacheGroups: {
                commons: {
                    test: /[\\/]node_modules[\\/]/,
                    name: 'vendors',
                    chunks: 'all'
                }
            }
        }
    }
};
const config = require('./webpack.config');
const mix = require('laravel-mix');

mix.js('resources/js/app.js', 'public/js')
    .sass('resources/sass/app.scss', 'public/css')
    .sass('resources/sass/pdf.scss', 'public/css');

if (mix.inProduction()) {
    mix.version();
}

mix.webpackConfig(config);
webpack.mix.js

const home = () => import(/* webpackChunkName: "home" */ '@/pages/home');
const login = () => import(/* webpackChunkName: "home" */ '@/pages/auth/login');
const pageNotFound = () => import(/* webpackChunkName: "home" */ '@/pages/errors/404');
const pageForbidden = () => import(/* webpackChunkName: "home" */ '@/pages/errors/403');

import users from "./users";
import profile from "./profile";
(...)

export default [
    ...users,
    ...profile,
    (...)
    {
        path: '/',
        name: 'home',
        component: home,
        meta: {
            auth: true,
        }
    },
    {
        path: '/forbidden',
        name: '403',
        component: pageForbidden,
        meta: {
            auth: true,
        }
    },
    {
        path: '/login',
        name: 'login',
        component: login,
        meta: {
            guest: true,
        }
    },
    {
        path: '*',
        name: '404',
        component: pageNotFound,
    }
];
const users = () => import(/* webpackChunkName: "users" */ '@/pages/users/index');
const show = () => import(/* webpackChunkName: "users" */ '@/pages/users/show');

export default [
    {
        path: '/users',
        name: 'users',
        component: users,
        meta: {
            auth: true,
            admin: true,
        }
    },
    {
        path: '/show/:id',
        name: 'users.show',
        component: show,
        meta: {
            auth: true,
            admin: true,
        }
    },
];
const path = require('path');
const webpack = require('webpack');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const CompressionPlugin = require('compression-webpack-plugin');
const moment = require('moment');

module.exports = {
    output: {
        chunkFilename: '[name].js',
    },
    resolve: {
        extensions: ['.js', '.json', '.vue'],
        alias: {
            '@': path.join(__dirname, './resources/js'),
        }
    },
    plugins: [
        new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
        new BundleAnalyzerPlugin({
            analyzerMode: 'static',
            openAnalyzer: false,
            reportFilename: 'bundle-analyzer-plugin/reports/' + moment().format('YYYYMMDD') + '.html'
        }),
        new CompressionPlugin({
            filename: '[path].gz[query]',
            algorithm: 'gzip',
            test: /\.js$|\.css$|\.html$/,
            threshold: 10240,
            minRatio: 0.7
        }),
    ],
    optimization: {
        splitChunks: {
            cacheGroups: {
                commons: {
                    test: /[\\/]node_modules[\\/]/,
                    name: 'vendors',
                    chunks: 'all'
                }
            }
        }
    }
};
const config = require('./webpack.config');
const mix = require('laravel-mix');

mix.js('resources/js/app.js', 'public/js')
    .sass('resources/sass/app.scss', 'public/css')
    .sass('resources/sass/pdf.scss', 'public/css');

if (mix.inProduction()) {
    mix.version();
}

mix.webpackConfig(config);

那么我做错了什么?我可以导入app.blade.php上的所有惰性路由文件,它将使用版本控制进行导入,但我将忽略这一点。。。这个想法是,当网站需要这些文件时,这些文件会被包括进来。但是当它们自动执行此操作时,它不会进行版本控制。

因为您使用的是
Vue路由器
,所以您应该像这样使用
动态导入


导出默认值[
{
路径:'/users',
名称:'用户',
组件:()=>import('@/pages/users/index'),
元:{
作者:是的,
管理员:是的,
}
},
{
路径:'/show/:id',
名称:“users.show”,
组件:导入('@/pages/users/show'),
元:{
作者:是的,
管理员:是的,
}
},
];

ref link

你能把你的
route.js
或路由器文件更新吗,你可以看到我使用了很多文件来获得更好的结构。你有没有尝试过将你的版本附加到
chunkFilename
比如
chunkFilename:'[name].js?t='+new Date().getTime()
?那么问题出在
app.blade.php
上,我无法导入vendors.js<代码>无法找到混合文件:/vendors.js。(视图:/var/www/html/resources/views/app.blade.php)
。我认为在导入文件时添加时间后缀是不可取的。您编写的两种路由都不同。我知道第一个是正确的。但这正是我正在做的。。。观看users.js上的第一行<代码>常量用户=()=>导入(/*webpackChunkName:“用户”*/'@/pages/users/index')在vue路由器中不要在组件内部使用
const
您可以使用
const
动态导入了解更多详细信息,请阅读该ref链接