У меня проблема при создании экземпляра компонента vue, импортированного из объединенной библиотеки накопительных пакетов, я добавляю глобальное свойство к корневому экземпляру Vue с помощью Vue.prototype, и оно используется всеми моими компонентами, однако, когда я создаю новый экземпляр используя метод Vue.extend, вновь созданный компонент не имеет ни одного из свойств прототипа или глобальных переменных, все они просто возвращают undefined.
//Main.js
Vue.prototype.$example = 'Hello there!';
//////////////////////////////
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')
//App.vue
import { MyDynamicComponent } from 'my-bundled-rollup-library';
export default {
created() {
var DynamicComponent = Vue.extend(MyDynamicComponent);
console.log(this.$example) //Returns 'Hello there!' (correct)
var instance = new DynamicComponent({
propsData: {
hello:'world',
},
})
///////////////////////////////////////////
console.log(instance.$example) //Returns undefined (does not have the property)
}
}
А вот пример компонента до того, как он был собран.
//MyDynamicComponent.vue
const MyDynamicComponent = {
props:{
hello:{
type:String
}
},
created() {
console.log(this.$example) //undefined
}
}
export default component
export { MyDynamicComponent as MyDynamicComponent }
Моя первая мысль заключается в том, что каким-то образом компонент использует другой экземпляр Vue, чем экземпляр Vue.extend.
vue
в my-bundled-rollup-library не то же самое, чтоvue
в Main.js. Это очень специфическая для вас установка, которая не была показана. Шаги для решения этой проблемы: 1. Убедитесь, чтоvue
не входит в комплект my-bundled-rollup-library. 2. Убедитесь, что ограниченияvue
dep максимально свободны, должны быть peerDependencies или*
в зависимостях. 3. Выведите пакеты с помощьюnpm dedupe
, если это не поможет, удалите и переустановите node_modules. Позвольте мне знать, если это помогает. Если этого не произошло, дайте возможность воспроизвести проблему. - person Estus Flask   schedule 26.04.2020