Skip to content

Plugin that makes Gatsby aware of GraphQL queries on your ReasonML codebase when it lives outside the src directory.

License

Notifications You must be signed in to change notification settings

feego/gatsby-bucklescript-output-linker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gatsby-bucklescript-output-linker

Plugin that makes Gatsby aware of GraphQL queries on your ReasonML codebase when it lives outside the src directory.

Why

With the current solutions that allow you to use Gatsby with ReasonML and Bucklescript, you are not allowed to write your GraphQL queries in your ReasonML code, unless your .re, as well as their compiled versions .bs.js files sit right next to your Gatsby .js files, in the src directory. The reason for this is Gatsby currently only looks for query in the src, .cache, fragments and the folders of the Gatsby plugins that you've declared on your package.json.

There's nothing wrong with using the src directory for the codebases of both languages and your GraphQL queries should work just fine if you do. However, if you prefer to keep them in separate folders of you'd like Bucklescript build files not to live next to their sources, but to use Bucklescript's lib output folder, there isn't an easy way.

This plugin basically hacks a symbolic link between the Buckescript's lib output folder and this plugin's own directory in node_modules, that Gatsby will properly watch for changes and compile.

Setup

  1. Install gatsby-bucklescript-output-linker

    npm i gatsby-bucklescript-output-linker
    

    or

    yarn add gatsby-bucklescript-output-linker
    
  2. Add 'gatsby-bucklescript-output-linker' to gatsby-config.js.

    // gatsby-config.js
    module.exports = {
        // ...
        plugins: ['gatsby-bucklescript-output-linker']
        // ...
    };
  3. Your bsconfig.json file should have in-source disabled, to use lib as the output folder:

    {
        "name": "my-gatsby-app",
        "reason": { "react-jsx": 3 },
        "bs-dependencies": ["reason-react"],
        "sources": {
            "dir": "re",
            "subdirs": true
        },
        "package-specs": {
            "module": "es6",
            "in-source": false
        },
        "suffix": ".js",
        "refmt": 3
    }

    For more configuration options refer to the BuckleScript docs or the bsconfig.json spec

  4. That's it! Run your app just like you would and you should be able to write GraphQL queries in your .re files now.

Usage

Query Example in ReasonML

[@bs.module "gatsby"]
external useStaticQuery: string => Js.t(unit) = "useStaticQuery";

let backgroundImageQuery = [%raw
  {|graphql`
    query {
      site {
        siteMetadata {
          title
        }
      }
    }
  `|}
];

[@react.component]
let make = () => {
  let result = useStaticQuery(backgroundImageQuery);
  Js.log(result);
  React.null
};

License

MIT

About

Plugin that makes Gatsby aware of GraphQL queries on your ReasonML codebase when it lives outside the src directory.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published