组件动态导入在 router.js 中不起作用
Component dynamic import doesn't work from router.js
使用 Nuxt.js,在我的 router.js
中,我正在尝试导入我的路由组件:
{
path: '/',
component: () => import(/* webpackChunkName: "index" */ '~/pages/index.vue')
}
我收到这个错误:
render function or template not defined in component: anonymous
我看到了别人的 Nuxt.js 项目,他们在最后添加了以下内容,并且它有效:
{
path: '/',
component: () => import(/* webpackChunkName: "index" */ '~/pages/index.vue').then(m => m.default || m)
}
我的 import()
的返回对象如下所示:
在另一个 Vue.js,非 Nuxt 项目中,同类 import()
看起来像这样:
在这两种情况下,组件都嵌套在某个“默认”对象中。但是使用 Nuxt.js 似乎您必须显式导入该对象,而使用常规 Vue.js 您不必指定它。
为什么?
关于为什么模块嵌套在一个{default}对象中:是因为Nuxt使用了ES6风格的模块。 ES6风格模块写成如下:
export default {
// some object
};
Default 并不是您唯一可以拥有的 属性。 More syntax.
关于为什么 vue-router 在没有 .default 的情况下工作,这是因为代码比 Nuxt 使用的代码更通用。 Nuxt 已经发布了自己的构建器,并且始终使用 ES6 模块。
另一方面,vue-router 不知道它将如何构建。所以为了更容易使用,vue-router 会自动检查模块是否是 ES6。
const resolve = once(resolvedDef => {
if (isESModule(resolvedDef)) {
resolvedDef = resolvedDef.default
}
// ...
}
您可能已经知道,在 Nuxt 项目中很少使用 router.js 文件,因为 Nuxt 已经有自己的路由系统,可以将您的代码分成每个页面的块。文档 here.
使用 Nuxt.js,在我的 router.js
中,我正在尝试导入我的路由组件:
{
path: '/',
component: () => import(/* webpackChunkName: "index" */ '~/pages/index.vue')
}
我收到这个错误:
render function or template not defined in component: anonymous
我看到了别人的 Nuxt.js 项目,他们在最后添加了以下内容,并且它有效:
{
path: '/',
component: () => import(/* webpackChunkName: "index" */ '~/pages/index.vue').then(m => m.default || m)
}
我的 import()
的返回对象如下所示:
在另一个 Vue.js,非 Nuxt 项目中,同类 import()
看起来像这样:
在这两种情况下,组件都嵌套在某个“默认”对象中。但是使用 Nuxt.js 似乎您必须显式导入该对象,而使用常规 Vue.js 您不必指定它。
为什么?
关于为什么模块嵌套在一个{default}对象中:是因为Nuxt使用了ES6风格的模块。 ES6风格模块写成如下:
export default {
// some object
};
Default 并不是您唯一可以拥有的 属性。 More syntax.
关于为什么 vue-router 在没有 .default 的情况下工作,这是因为代码比 Nuxt 使用的代码更通用。 Nuxt 已经发布了自己的构建器,并且始终使用 ES6 模块。
另一方面,vue-router 不知道它将如何构建。所以为了更容易使用,vue-router 会自动检查模块是否是 ES6。
const resolve = once(resolvedDef => {
if (isESModule(resolvedDef)) {
resolvedDef = resolvedDef.default
}
// ...
}
您可能已经知道,在 Nuxt 项目中很少使用 router.js 文件,因为 Nuxt 已经有自己的路由系统,可以将您的代码分成每个页面的块。文档 here.