添加新路由时 Vue 路由器不工作
Vue router is not working when new route added
使用此配置,我的应用程序在本地主机中运行良好,我在本地主机中使用 XAMMP。但是当我使用 Linux (ubunto) OS 在 VPS 中部署我的应用程序时,我遇到了这个问题。在最初几天他们也工作得很好,但最近当我添加最后一条路线(类别)并执行 'npm run production' 我的路线突然停止工作。
When I click on a router-link the URL doesn't even change.
我将网络服务器从 nginx 更改为 apache,但这没有任何区别。
我的路线是这样的:
const Index = resolve => {
require.ensure(['./frontend-components/main-content/index'], () => {
resolve(require('./frontend-components/main-content/index'));
});
};
const news = resolve => {
require.ensure(['./frontend-components/single/news'], () => {
resolve(require('./frontend-components/single/news'));
});
};
const lists = resolve => {
require.ensure(['./frontend-components/single/lists'], () => {
resolve(require('./frontend-components/single/lists'));
});
};
const categories = resolve => {
require.ensure(['./frontend-components/single/categories'], () => {
resolve(require('./frontend-components/single/categories'));
});
};
export const routes = [
{path: '/', component: Index},
{path: '/articles/:article_id/:slug',component: news,name: 'articles'},
{path: '/lists/:article_id/:slug',component: lists,name: 'lists'},
{path: '/categories/:cat_id/:slug', component: categories},
]
我的 webpack 配置是:
const { mix } = require('laravel-mix');
mix.js('resources/assets/js/app.js', 'public/js')
.js('resources/assets/js/fr-app.js', 'public/js')
.sass('resources/assets/sass/app.scss', 'public/css')
.sass('resources/assets/sass/fr-app.scss', 'public/css')
.sass('resources/assets/sass/admin.scss', 'public/css')
.options({processCssUrls: false})
.webpackConfig({ output: { filename: '[name].js', chunkFilename:
'js/[name].app.js', publicPath: '/' } });
点击路由器时出现这个错误-link:
Uncaught (in promise) TypeError: Cannot read property 'call' of undefined
它指向源代码的这一行:
// Execute the module function
modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
require.ensure
是遗留的 Webpack 语法,已被 import
取代。正如@Phil 指出的那样,resolve => {/*...*/}
本身不会创建延迟加载路由所需的 Promise
。你的意思可能是这样的:
const foo = new Promise(resolve => {
require.ensure( './path/to/foo', () => resolve(require('./path/to/foo')) );
});
const routes = [
{
path: '/foo',
component: foo
}
];
然而,vue-router docs推荐延迟加载路由的import
语法:
const routes = [
{
path: '/foo',
component: () => import('./path/to/foo')
}
];
使用此配置,我的应用程序在本地主机中运行良好,我在本地主机中使用 XAMMP。但是当我使用 Linux (ubunto) OS 在 VPS 中部署我的应用程序时,我遇到了这个问题。在最初几天他们也工作得很好,但最近当我添加最后一条路线(类别)并执行 'npm run production' 我的路线突然停止工作。
When I click on a router-link the URL doesn't even change.
我将网络服务器从 nginx 更改为 apache,但这没有任何区别。 我的路线是这样的:
const Index = resolve => {
require.ensure(['./frontend-components/main-content/index'], () => {
resolve(require('./frontend-components/main-content/index'));
});
};
const news = resolve => {
require.ensure(['./frontend-components/single/news'], () => {
resolve(require('./frontend-components/single/news'));
});
};
const lists = resolve => {
require.ensure(['./frontend-components/single/lists'], () => {
resolve(require('./frontend-components/single/lists'));
});
};
const categories = resolve => {
require.ensure(['./frontend-components/single/categories'], () => {
resolve(require('./frontend-components/single/categories'));
});
};
export const routes = [
{path: '/', component: Index},
{path: '/articles/:article_id/:slug',component: news,name: 'articles'},
{path: '/lists/:article_id/:slug',component: lists,name: 'lists'},
{path: '/categories/:cat_id/:slug', component: categories},
]
我的 webpack 配置是:
const { mix } = require('laravel-mix');
mix.js('resources/assets/js/app.js', 'public/js')
.js('resources/assets/js/fr-app.js', 'public/js')
.sass('resources/assets/sass/app.scss', 'public/css')
.sass('resources/assets/sass/fr-app.scss', 'public/css')
.sass('resources/assets/sass/admin.scss', 'public/css')
.options({processCssUrls: false})
.webpackConfig({ output: { filename: '[name].js', chunkFilename:
'js/[name].app.js', publicPath: '/' } });
点击路由器时出现这个错误-link:
Uncaught (in promise) TypeError: Cannot read property 'call' of undefined
它指向源代码的这一行:
// Execute the module function
modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
require.ensure
是遗留的 Webpack 语法,已被 import
取代。正如@Phil 指出的那样,resolve => {/*...*/}
本身不会创建延迟加载路由所需的 Promise
。你的意思可能是这样的:
const foo = new Promise(resolve => {
require.ensure( './path/to/foo', () => resolve(require('./path/to/foo')) );
});
const routes = [
{
path: '/foo',
component: foo
}
];
然而,vue-router docs推荐延迟加载路由的import
语法:
const routes = [
{
path: '/foo',
component: () => import('./path/to/foo')
}
];