Giter VIP home page Giter VIP logo

persistgraphql-webpack-plugin's Introduction

PersistGraphQL Webpack Plugin

Build Status Greenkeeper badge Twitter Follow

Webpack Plugin that gathers all the GraphQL queries/mutation/subscriptions both from .graphql files and from embedded queries in JavaScript/TypeScript source code. It generates virtual module persisted_queries.json with all the queries as a map object (query -> id) available for require from any place within source code and output file on file system with all the queries.

Installation

npm install --save-dev persistgraphql-webpack-plugin

Usage

When Webpack is used for front-end only

Sample Webpack config:

var PersistGraphQLPlugin = require('persistgraphql-webpack-plugin');

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

  plugins: [
    new PersistGraphQLPlugin({filename: 'persisted_queries.json',
        moduleName: path.resolve('node_modules/persisted_queries.json')})
  ]
};

In the source code of front-end persisted GraphQL queries will be injected as a virtual module persisted_queries.json. This module will be updated if queries added or changed. Also asset with name persisted_queries.json will be generated during compilation and written to output directory.

var queryMap = require('persisted_queries.json');
console.log(queryMap);

When Webpack is used both for back-end and front-end

var PersistGraphQLPlugin = require('persistgraphql-webpack-plugin');

const moduleName = path.resolve('node_modules/persisted_queries.json');
const frontendPersistPlugin = new PersistGraphQLPlugin({ moduleName });
const backendPersistPlugin =
    new PersistGraphQLPlugin({ provider: clientPersistPlugin, moduleName });

var frontendWebpackConfig = {
  module: {
    rules: [
      {
        test: /\.(graphql|gql)$/,
        use: 'graphql-tag/loader'
      },
    ]
  }

  plugins: [
    frontendPersistPlugin
  ]
};

var backendWebpackConfig = {
  // ...
  plugins: [
    backendPersistPlugin
  ]
}

Both in the source code of front-end and back-end persisted GraphQL queries will be injected as a virtual module node_modules/persisted_queries.json. This module will be updated if queries added or changed.

var queryMap = require('persisted_queries.json');
console.log(queryMap);
Name Type Description
moduleName {String} Name of virtual wepback module with persisted GraphQL queries, this option is required
filename {String} Name of the ouput file with persisted GraphQL queries
addTypename {Boolean} Apply a query transformation to the query documents, adding the __typename field at every level of the query, default: true
hashQuery {Function} Function to hash queries in hash map, default: SHA-256 from query, if false passed - counter values are used
provider {Object} Instance of plugin running on another webpack instance which will provide persisted GraphQL queries
excludeRegex {RegExp} RegExp to match file path that will be excluded from processing by the plugin, default: /[\\/]node_modules[\\/]/
graphqlRegex {RegExp} RegExp to match files loaded by graphql-tag/loader that should be processed by the plugin, default: /(.graphql|.gql)$/
jsRegex {RegExp} RegExp to match js files that have embedded GraphQL queries marked with gql tag, default: /(.jsx?|.tsx?)$/

License

Copyright © 2017 SysGears INC. This source code is licensed under the MIT license.

persistgraphql-webpack-plugin's People

Contributors

larixer avatar greenkeeper[bot] avatar

Watchers

James Cloos avatar Pete Nykänen avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.