Table of Contents
Adding Nodemon
Nodemon is the same like node with the benefit that it will monitor the developing folder and restart automatically,, which makes the developing process more convenient. Let’s go ahead and install it:
yarn add nodemon --dev
And replace the node with nodemon in the start script:
./package.json
{ "name": "graphql-tutorial", "version": "1.0.0", "main": "index.js", "license": "MIT", "scripts": { "start": "nodemon server.js" }, "dependencies": { "express": "^4.16.4", "express-graphql": "^0.7.1", "graphql": "^14.0.2" }, "devDependencies": { "nodemon": "^1.18.9" } }
Now, whenever we edit and save a file Nodemon will conveniently restart for us and reflect the new changes.
If we also want to get advantage of the latest ES syntax we would like to install Babel.
Adding Babel 7
Starting with Babel7 the config setting changes quite a bit.
- Babels packages are now scoped and Babel has renamed it’s NPM packages. This means
babel-cli
for example has been renamed to@babel/cli
. - No messing around with presets anymore. You can just use
@babel/preset-env
now and optionally define your requirements in the config file. babel-node has been moved from the CLI to it’s own package:
@babel/node
Let’s go ahead and install all necessary packages:
yarn add @babel/core @babel/cli @babel/node --dev
and tell nodemon to use Babel to transpile JS.
./package.json
{ "name": "graphql-tutorial", "version": "1.0.0", "main": "index.js", "license": "MIT", "scripts": { "start": "nodemon --inspect=10111 --exec babel-node server.js" }, "dependencies": { "express": "^4.16.4", "express-graphql": "^0.7.1", "graphql": "^14.0.2" }, "devDependencies": { "nodemon": "^1.18.9" } }
Before we could start using the new ES features we have to install a preset and tell Babel to use it by adding ./babelrc
config file
yarn add @babel/preset-env --dev
add
./.babelrc
{ "presets": [ [ "@babel/preset-env", { "useBuiltIns": "entry" } ] ] }
give it a try …
./server.js
import express from 'express'; import graphqlHTTP from 'express-graphql'; import schema from './src/schema'; // Logger middleware var logger = function(req, res, next) { console.log("GOT REQUEST >", req.ip); next(); // Passing the request to the next handler in the stack. } var app = express(); app.use(logger); app.use('/graphql', graphqlHTTP({ schema: schema, graphiql: true, })); app.listen(4000); console.log('Running a GraphQL API server at localhost:4000/graphql');