GraphQL Loader for Webpack
A webpack loader for .graphql
query documents with first class support for schema validation and fragments definitions.
Origin
This is a fork of webpack-graphql-loader. The differences are:
- Removed all runtime dependencies.
- Updates development dependencies.
- Removed support for outputting
DocumentNode
AST. Only output as string is supported.
Installation
yarn add --dev @jorritschippers/webpack-graphql-loader # or npm install --save-dev @jorritschippers/webpack-graphql-loader
You will also need to install a copy of graphql
, which is a peer dependency of this package.
yarn add --dev graphql # or npm install --save-dev graphql
Configuration
Add @jorritschippers/webpack-graphql-loader
to your webpack configuration:
module.exports = {
// ...
module: {
rules: [ // or "loaders" for webpack 1.x
{ test: /\.graphql?$/, loader: '@jorritschippers/webpack-graphql-loader' }
]
}
}
Specifying options
You can also pass options to the loader via webpack options:
module.exports = {
// ...
module: {
rules: [ // or "loaders" for webpack 1.x
{
test: /\.graphql?$/,
use: [
{
loader: 'webpack-graphql-loader',
options: {
// validate: true,
// schema: "./path/to/schema.json",
// removeUnusedFragments: true
// etc. See "Loader Options" below
}
}
]
}
]
}
}
Loader Options
schema (string) (default="")
The location of your graphql introspection query schema JSON file. If used with the validate
option, this will be used to validate imported queries and fragments.
validate (boolean) (default=false)
If true
, the loader will validate the imported document against your specified schema
file.
minify (boolean) (default=false)
If true
and the output
option is string
, the loader will strip comments and whitespace from the graphql document strings. This helps to reduce bundled code size.
removeUnusedFragments (boolean) (default=false)
If true
, the loader will remove unused fragments from the imported document. This may be useful if a query is importing fragments from a file, but does not use all fragments in that file. Also see this issue.
.graphql
files
Import statements in The loader supports importing .graphql
files from other .graphql
files using an #import
statement. For example:
query.graphql
:
#import "./fragments.graphql"
query {
...a
...b
}
fragments.graphql
:
fragment a on A {}
fragment b on A {
foo(bar: 1)
}
In the above example, fragments a
and b
will be made available within query.graphql
. Note that all fragments in the imported file should be used in the top-level query, or the removeUnusedFragments
should be specified.