Могу ли я использовать компонент, использующий VueX, без моего приложения, также использующего VueX?

Я хотел бы использовать этот компонент в своем приложении Vue: https://commbocc.github.io/hcflgov-vue-esri-search/docs/.

Однако выдает ошибку: TypeError: "t.$store is undefined"

Я подозреваю, что причина в том, что я не использую VueX, поэтому мне не удается инициализировать хранилище VueX, которое ищет компонент.

В общем, можно ли использовать компонент, использующий VueX, если мое приложение этого не делает? Есть ли способ обойти это? Я думаю, что для внедрения VueX потребуется слишком много усилий.


person Steve Bennett    schedule 12.04.2019    source источник


Ответы (2)


Да, ты можешь. В большинстве случаев люди создают плагины vue. При этом вы можете установить их как npm install myCoolPlugin и использовать в своем приложении, импортировав его: import myCoolPlugin from 'myCoolPlugin', а затем, в зависимости от плагина, вы можете установить его глобально, как это делает vuex:

Vue.use(myCoolPlugin)

или вы можете явно использовать компоненты плагина по своему усмотрению, прямо там, где вы собираетесь их использовать, например:

import {coolButton, coolInput} from 'myCoolPlugin';
export default {
    name: 'home-page',
    components: [coolButton, coolInput],
    ...
}

Плагины также имеют файл package.json, который содержит метаданные о том, от чего этот плагин зависит и т. Д. (Точно так же, как ваше приложение). Когда вы npm i myCoolPlugin, npm проверяет файл package.json плагина, чтобы узнать, от каких сторонних пакетов зависит плагин, а затем продолжает их установку в node_modules вашего приложения.

Проблема с вашим компонентом "esri-search" заключается в том, что он не настроен как пакет / плагин. Поэтому он не будет устанавливать никаких необходимых ему зависимостей (например vuex, lodash и т. д ...) в вашем приложении.

Вот почему вам пришлось установить vuex как зависимость от вашего приложения, потому что, когда вы копируете и вставляете этот компонент в свое приложение, это не плагин, он становится вашим приложением.

Имеет ли это смысл? :)

person Sølve Tornøe    schedule 12.04.2019

Кажется, в этом случае я смог решить эту ошибку следующим образом:

npm install --save vuex

In main.js:

import VueX from 'vuex';
Vue.use(VueX);

Это не дает полного ответа на вопрос, всегда ли это будет иметь место, поэтому открыты для лучших ответов.

person Steve Bennett    schedule 12.04.2019