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