LoginSignup
1
2

More than 5 years have passed since last update.

docker + node.jsでe6を試したメモ

Last updated at Posted at 2017-03-19

babel-nodeを利用して、node.jsでもes6の記法を使えるようにする。
node_modulesをignoreから外す。*

環境

  • docker17.03.0-ce
  • ubuntu-16.04(仮想環境)
  • vagrant1.9.2
  • virtual box 5.1.18
  • windows10

ディレクトリ構造

- express
  - Dockerfile
  - package.json
  - .babelrc
- project
  - src
    - app
      - app.js 
      - bin
        - www
- docker-compose.yml

ファイル

express/Dockerfile
FROM node:7.7.3
WORKDIR /express/app
RUN npm init -y
RUN npm install babel-cli --save
RUN npm install express@5.0.0-alpha.5 --save
RUN npm install babel-preset-latest --save-dev
express/package.json
{
  "name": "app",
  "version": "1.0.0",
  "description": "",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "babel-node ./bin/www"
  },
  "dependencies": {
    "babel-cli": "^6.24.0",
    "express": "^5.0.0-alpha.5"
  },
  "devDependencies": {
    "babel-preset-latest": "^6.24.0"
  }
}
express/.babelrc
{
  "ignore": [],
  "presets": ["latest"]
}
docker-compose.yml
version: '2'
services:
  express:
    build: ./express
    volumes:
    - ./express/package.json:/express/app/package.json
    - ./express/.babelrc:/express/app/.babelrc
    - ./project/src/app/bin:/express/app/bin
    - ./project/src/app/app.js:/express/app/app.js
    ports:
      - "3000:3000"
    command: [npm, run, start]
project/src/app/app.js
import express from 'express';

const app = express();

app.get('/', (req, res) => {
  res.send('Hello World!');
});

module.exports = app;
project/src/app/bin/www
#!/usr/bin/env node

import app from '../app';
import debug_module from 'debug';
import http from 'http';

const debug = debug_module('wmfwapp:server');

const port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

const server = http.createServer(app);

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

function normalizePort(val) {
  const port = parseInt(val, 10);

  if (isNaN(port)) {
    // named pipe
    return val;
  }

  if (port >= 0) {
    // port number
    return port;
  }

  return false;
}

function onError(error) {
  if (error.syscall !== 'listen') {
    throw error;
  }

  const bind = typeof port === 'string'
    ? `Pipe ${port}`
    : `Port ${port}`;

  // handle specific listen errors with friendly messages
  switch (error.code) {
    case 'EACCES':
      console.error(`${bind} requires elevated privileges`);
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(`${bind} is already in use`);
      process.exit(1);
      break;
    default:
      throw error;
  }
}

function onListening() {
  const addr = server.address();
  const bind = typeof addr === 'string'
    ? `pipe ${addr}`
    : `port ${addr.port}`;
  debug(`Listening on ${bind}`);
}

参考

ECMAScript6でNode.jsを動かす - babel-node
babel-presets
babel-node

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2