如何在NPM链接的Nuxt插件中引用Vue组件?

时间:2019-10-29 16:59:13

标签: nuxt.js nuxt

我有一个自定义的Nuxt模块,该模块与NPM链接,并添加了这样的插件:

import path from 'path'

export default function (moduleOptions) {
  this.addPlugin(path.resolve(__dirname, 'plugin.js'))
}

这很好,插件然后导入一个相对的Vue组件并像这样添加到路由器中:

import ProductListing from './components/ProductListing.vue'

export default ({ app }, inject) => {
  app.router.addRoutes([
    {
      path: '/products',
      name: 'products',
      component: ProductListing,
      meta: {
        permissions: ['manage_catalogue']
      }
    }
  ])
}

运行npm run dev时出现错误:

This relative module was not found:                                                                                       friendly-errors 16:48:40
                                                                                                                          friendly-errors 16:48:40
* ./components/ProductListing.vue in ./.nuxt/src.plugin.2237471c.js

enter image description here

这是有道理的,因为它试图在与.nuxt文件夹的关系中找到它,但是我无法弄清楚如何获取它来解析该组件?如果我将模块/插件移到Nuxt项目的modules文件夹中,就可以了。

我尝试过的

试图添加webpack配置以不解析符号链接

    extend (config, { isDev, isClient }) {
      Object.assign(config.resolve, {
        symlinks: false
      })
    }

我试图像这样将模块添加到可转换构建选项中:

  build: {
    transpile: [
      '@symlinked/module'
    ]
  }

我尝试使用webpack和vue loader将模块编译为commonjs,这只会给模板带来完全不同的错误。


在这一点上,我有点不知所措,希望有人遇到类似的情况并克服它。谢谢!

1 个答案:

答案 0 :(得分:0)

为了在插件中使用ProductListing并将其导入,必须在模块中添加PluginListings.vue作为模板。添加文件作为模板对nuxt说,您必须将此文件复制到.nuxt目录

import path from 'path'

export default function (moduleOptions) {
  // add ProductListing as template
  this.addTemplate(path.resolve(__dirname, 'ProductListing.vue'))

  // register plugin
  this.addPlugin(path.resolve(__dirname, 'plugin.js'))
}
相关问题