如何使用@vue/composition-api 和 nuxt.js 获取 vue-apollo 实例
How to get an vue-apollo instance with @vue/composition-api and nuxt.js
如何配置 vue-apollo
,结合 @vue/apollo-composable
与 @vue/composition-api
或 Vue3.0
一起完成?
因为虽然我通过使用 @nuxtjs/apollo
:
获得了默认值 apolloClient
import { DefaultApolloClient } from "@vue/apollo-composable";
const myPlugin: Plugin = (context, inject) => {
const defaultClient = ctx.app.apolloProvider.defaultClient;
// do stuff with defaultClient, e.g. provide()
}
export default myPlugin
它仍然是空的,而不是填充了我在 nuxt.config.ts
中的设置。
如何使用 @vue/apollo-composable
创建工作 vue-apollo
client
或如何第一手创建 context.root.$apollo
?
这是我目前在 nuxt 中设置 vue-apollo 的方法。这很可能是一个移动的目标,因为这两个软件包都相对较新并且正在积极开发中。
包版本是
"@vue/apollo-composable": "4.0.0-alpha.1"
"@vue/composition-api": "version": "0.3.4"
Apollo 设置
//apolloClient.js
import { ApolloClient } from 'apollo-client';
import { InMemoryCache } from 'apollo-cache-inmemory';
import link from './link';
export default function apolloClient(_, inject) {
const cache = new InMemoryCache();
const client = new ApolloClient({
// Provide required constructor fields
cache,
link,
// Provide some optional constructor fields
name: 'apollo-client',
queryDeduplication: false,
defaultOptions: {
watchQuery: {
fetchPolicy: 'cache-and-network',
},
},
});
inject('apollo', client);
}
// link.js
import { split } from 'apollo-link';
import { HttpLink } from 'apollo-link-http';
import { WebSocketLink } from 'apollo-link-ws';
import { getMainDefinition } from 'apollo-utilities';
import fetch from 'unfetch';
const httpLink = new HttpLink({
uri: 'http://localhost:8080/v1/graphql',
credentials: 'same-origin',
fetch,
});
const wsParams = {
uri: `ws://localhost:8080/v1/graphql`,
reconnect: true,
};
if (process.server) {
wsParams.webSocketImpl = require('ws');
}
const wsLink = new WebSocketLink(wsParams);
// using the ability to split links, you can send data to each link
// depending on what kind of operation is being sent
const link = split(
// split based on operation type
({ query }) => {
const definition = getMainDefinition(query);
return (
definition.kind === 'OperationDefinition' &&
definition.operation === 'subscription'
);
},
wsLink,
httpLink,
);
export default link;
然后通过上面的方法,将 apollo 作为插件包含在 nuxtconfig 中
plugins: [
'~/plugins/vue-composition-api',
'~/plugins/apolloClient'
],
如何配置 vue-apollo
,结合 @vue/apollo-composable
与 @vue/composition-api
或 Vue3.0
一起完成?
因为虽然我通过使用 @nuxtjs/apollo
:
apolloClient
import { DefaultApolloClient } from "@vue/apollo-composable";
const myPlugin: Plugin = (context, inject) => {
const defaultClient = ctx.app.apolloProvider.defaultClient;
// do stuff with defaultClient, e.g. provide()
}
export default myPlugin
它仍然是空的,而不是填充了我在 nuxt.config.ts
中的设置。
如何使用 @vue/apollo-composable
创建工作 vue-apollo
client
或如何第一手创建 context.root.$apollo
?
这是我目前在 nuxt 中设置 vue-apollo 的方法。这很可能是一个移动的目标,因为这两个软件包都相对较新并且正在积极开发中。
包版本是
"@vue/apollo-composable": "4.0.0-alpha.1"
"@vue/composition-api": "version": "0.3.4"
Apollo 设置
//apolloClient.js
import { ApolloClient } from 'apollo-client';
import { InMemoryCache } from 'apollo-cache-inmemory';
import link from './link';
export default function apolloClient(_, inject) {
const cache = new InMemoryCache();
const client = new ApolloClient({
// Provide required constructor fields
cache,
link,
// Provide some optional constructor fields
name: 'apollo-client',
queryDeduplication: false,
defaultOptions: {
watchQuery: {
fetchPolicy: 'cache-and-network',
},
},
});
inject('apollo', client);
}
// link.js
import { split } from 'apollo-link';
import { HttpLink } from 'apollo-link-http';
import { WebSocketLink } from 'apollo-link-ws';
import { getMainDefinition } from 'apollo-utilities';
import fetch from 'unfetch';
const httpLink = new HttpLink({
uri: 'http://localhost:8080/v1/graphql',
credentials: 'same-origin',
fetch,
});
const wsParams = {
uri: `ws://localhost:8080/v1/graphql`,
reconnect: true,
};
if (process.server) {
wsParams.webSocketImpl = require('ws');
}
const wsLink = new WebSocketLink(wsParams);
// using the ability to split links, you can send data to each link
// depending on what kind of operation is being sent
const link = split(
// split based on operation type
({ query }) => {
const definition = getMainDefinition(query);
return (
definition.kind === 'OperationDefinition' &&
definition.operation === 'subscription'
);
},
wsLink,
httpLink,
);
export default link;
然后通过上面的方法,将 apollo 作为插件包含在 nuxtconfig 中
plugins: [
'~/plugins/vue-composition-api',
'~/plugins/apolloClient'
],