Vue I18n - TypeError: Невозможно переопределить свойство: $ i18n - PullRequest
0 голосов
/ 16 мая 2018

Так что я схожу с ума от этого. Я действительно не понимаю.

Это минимальная версия моего файла app.js:

import Vue from 'vue'
import VueI18n from 'vue-i18n'

console.log("vue.prototype", Vue.prototype.$i18n)
Vue.use(VueI18n)
console.log("vue.prototype", Vue.prototype.$i18n)

const createApp = function() {


  // create store and router instances
  const store = createStore()
  const router = createRouter()

  if(process.browser) {
    if(window.__INITIAL_STATE__) {
      store.replaceState(window.__INITIAL_STATE__)
    }
  }

  // sync the router with the vuex store.
  // this registers `store.state.route`
  sync(store, router)

  // create the app instance.
  // here we inject the router, store and ssr context to all child components,
  // making them available everywhere as `this.$router` and `this.$store`.
  // 
  const app = new Vue({
    router,
    store,
    render: h => h(Application)
  })

  // expose the app, the router and the store.
  // note we are not mounting the app here, since bootstrapping will be
  // different depending on whether we are in a browser or on the server.
  return { app, router, store }
}

export { createApp }

Как видите, я ничего не делал, кроме добавления Vue.use (VueI18n) в код. Я использую:

{
"vue-i18n": "^7.6.0"
}

Теперь я получаю эту ошибку:

TypeError: Невозможно переопределить свойство: $ i18n

Строка, в которой появляются эти ошибки, - это функция в исходном коде:

function install (_Vue) {
  Vue = _Vue;

  var version = (Vue.version && Number(Vue.version.split('.')[0])) || -1;
  /* istanbul ignore if */
  if (process.env.NODE_ENV !== 'production' && install.installed) {
    warn('already installed.');
    return
  }
  install.installed = true;

  /* istanbul ignore if */
  if (process.env.NODE_ENV !== 'production' && version < 2) {
    warn(("vue-i18n (" + (install.version) + ") need to use Vue 2.0 or later (Vue: " + (Vue.version) + ")."));
    return
  }

  console.log("VUE:PROTOTYPE", Vue.prototype.$i18n)

  Object.defineProperty(Vue.prototype, '$i18n', {
    get: function get () { return this._i18n }
  });

  console.log("VUE:PROTOTYPE", Vue.prototype.$i18n)

  extend(Vue);
  Vue.mixin(mixin);
  Vue.directive('t', { bind: bind, update: update });
  Vue.component(component.name, component);

  // use object-based merge strategy
  var strats = Vue.config.optionMergeStrategies;
  strats.i18n = strats.methods;
}

И console.log ("VUE: PROTOTYPE"), где я был добавлен, и, к удивлению, первый возвращает "undefined", а второй никогда не достигается из-за ошибки.

Что происходит? У кого-нибудь есть подсказка?

...