未找到 Nuxt 注入

Nuxt injection not found

向 Nuxt 实例注入记录器时我做错了什么?

loglevel.client.js

import log from 'loglevel';

log.setLevel(process.env.LOG_LEVEL || 'debug');

export default ({ app }, inject) => {
  inject('log', log);
  log.debug('logger set up')
}

nuxt.config.js

  plugins: [
    '~/plugins/loglevel.client.js',
    '~/plugins/api.js',
  ],

plugins\api.js

if (process.client) {
  console.log('on client console')
  this.$log.error('on client $log')
}

浏览器:

api.js?e568:4 on client console
08:22:26.456 api.js?e568:5 Uncaught TypeError: Cannot read properties of undefined (reading '$log')
    at eval (api.js?e568:5:1)
    at Module../plugins/api.js (app.js:1033:1)

inject 通过将 $log 作为 属性 附加到根 Vue 应用程序和 Nuxt 上下文,使 $log 在其他地方可用。

插件是 运行 在根 Vue 应用实例化之前——你不能通过 this.$log 访问 $log,除非 this 引用根 Vue 应用实例(就像在组件中一样)。

相反,您必须通过 Nuxt 上下文访问 $log,它可以方便地用作 api.js 插件的第一个参数。

export default ({ $log }) => {
  if (process.client) {
    console.log('on client console')
    $log.error('on client $log')
  }
}

来自docs:

The (Nuxt) context provides additional objects/params from Nuxt to Vue components and is available in special nuxt lifecycle areas like asyncData , fetch , plugins , middleware and nuxtServerInit.

此外,loglevel 似乎已注册为 client-side 插件 (loglevel.client.js)。该代码不会 运行 服务器端 — 因此您不必在 process.client.

中包装任何内容