如何让Vue(vue cli 3)正确处理GraphQL文件?

问题描述 投票:0回答:3

我有一个新的基于 vue-cli 3 的项目,其中

.graphql
文件夹中有
src/
文件,例如:

#import "./track-list-fragment.graphql"

query ListTracks(
  $sortBy: String
  $order: String
  $limit: Int
  $nextToken: String
) {
  listTracks(
    sortBy: $sortBy
    order: $order
    limit: $limit
    nextToken: $nextToken
  ) {
    items {
      ...TrackListDetails
    }
    nextToken
  }
}

当我运行

yarn serve
时,它抱怨没有 GraphQL 的加载器:

Module parse failed: Unexpected character '#' (1:0)
You may need an appropriate loader to handle this file type.
> #import "./track-list-fragment.graphql"
|
| query ListTracks(

但是我确实正确设置了

vue.config.js
(我认为):

const webpack = require('webpack');
const path = require('path');

module.exports = {
  configureWebpack: {
    resolve: {
      alias: {
        $scss: path.resolve('src/assets/styles'),
      },
    },
    plugins: [
      new webpack.LoaderOptionsPlugin({
        test: /\.graphql$/,
        loader: 'graphql-tag/loader',
      }),
    ],
  },
};

我该如何解决这个问题?

webpack vue.js graphql vue-cli
3个回答
4
投票

这有效!

const path = require('path');

module.exports = {
  pluginOptions: {
    i18n: {
      locale: 'en',
      fallbackLocale: 'en',
      localeDir: 'locales',
      enableInSFC: false,
    },
  },
  configureWebpack: {
    resolve: {
      alias: {
        $element: path.resolve(
          'node_modules/element-ui/packages/theme-chalk/src/main.scss'
        ),
      },
    },
  },
  chainWebpack: config => {
    config.module
      .rule('graphql')
      .test(/\.graphql$/)
      .use('graphql-tag/loader')
      .loader('graphql-tag/loader')
      .end();
  },
};

4
投票

我很确定 LoaderOptionsPlugin 不是你想要的。 webpack 文档提到这用于从 webpack 1 迁移到 webpack 2。这不是我们在这里所做的。

这是在“普通”webpack 配置中配置加载器的样子

module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          { loader: 'style-loader' },
          {
            loader: 'css-loader',
            options: {
              modules: true
            }
          }
        ]
      }
    ]
  }
};

遵循这种方法并假设我正确理解了 Vue 3 文档,以下是我如何使用原始示例的数据配置 Vue 3 应用程序:

module.exports = {
  configureWebpack: {
    module: {
      rules: [
        {
          test: /\.css$/,
          use: [
            { loader: 'style-loader' },
            {
              loader: 'css-loader',
              options: {
                modules: true
              }
            }
          ]
        }
      ]
    }
  }
}

现在,我们需要配置 graphql 加载器而不是 css 加载器:

module.exports = {
  configureWebpack: {
    module: {
      rules: [
        {
          test: /\.graphql$/,
          use: 'graphql-tag/loader'
        }
      ]
    }
  }
}

这是未经测试的,我只是偏离了我对 webpack 和 Vue 文档的理解。我没有可以用来测试这个的项目,但如果您发布项目的链接,我将非常乐意进行测试。


0
投票

如果您正在使用vite,请使用此软件包 vite-plugin-graphql-loader

npm i vite-plugin-graphql-loader --save-dev

在 vite.config.ts 或 vite.config.js 中:

import { defineConfig } from "vite";
import graphqlLoader from "vite-plugin-graphql-loader";

export default defineConfig({
    plugins: [graphqlLoader()],
});

然后导入您的文件

import ExampleQuery, { ExampleFragment } from "./example.graphql";
© www.soinside.com 2019 - 2024. All rights reserved.