Thursday, 25 May 2017

Docker node build - babel preset and deep module errors

After resolving several extra babel presets required (to what my npm scripts built), then an unknown plugin "add-module-exports" in /node_modules/react-dropzone/.babelrc, I'm now encountered a requirement to npm rebuild node-sass --force

Also, webpack is taking a long time build, 3-4min.

I have a feeling either my node_module folder or the environment isnt setup properly here. Is my current setup doing something silly that I'm missing?

.babelrc

{
  "compact": false,
  "presets": [
    "es2015",
    "es2015-loose",
    "stage-2",
    "stage-1",
    "stage-0",
    "react"
  ],
  "env": {
    "test": {
      "plugins": ["transform-es2015-modules-commonjs"]
    }
  }
}

Dockerfile:

FROM node:7.7.3

RUN npm install -g pm2 babel-cli

# Useful for reloading npm install if package json changed
ADD package.json /tmp/package.json
RUN cd /tmp && npm install
RUN mkdir -p /usr/src/app && cp -a /tmp/node_modules /usr/src/app

COPY . /usr/src/app
WORKDIR /usr/src/app
ADD .babelrc server.js index.js /usr/src/app/

CMD ["pm2", "start", "./index.js", "--no-daemon"]
EXPOSE 2020

docker-compose.yml

doc:
  build: .
  ports:
    - "2020:2020"
  volumes:
    - .:/usr/src/app/
    - /usr/src/app/node_modules

./index.js

require('babel-register');
require('./server.js');

./server.js

var express = require('express');
var path = require('path');

const isDeveloping = process.env.NODE_ENV !== 'production';
const PORT = isDeveloping ? 2020 : 2020; // process.env.PORT - docker?
const app = express();


if (isDeveloping) {
  let webpack = require('webpack');
  let webpackMiddleware = require('webpack-dev-middleware');
  let webpackHotMiddleware = require('webpack-hot-middleware');
  let config = require('./webpack.prod.config.js');
  const compiler = webpack(config);
  const middleware = webpackMiddleware(compiler, {
  publicPath: config.output.publicPath,
    noInfo: true,
    quiet: false,
    lazy: false,
    watchOptions: {
     aggregateTimeout: 300,
     poll: true
   },
   stats: {
    colors: true,
   }
 });

const bundlePath = path.join(__dirname, './dist/index.html');

app.use(middleware);
app.use(webpackHotMiddleware(compiler));
app.get('*', function response(req, res) {
res.write(middleware.fileSystem.readFileSync(bundlePath));
res.end();
});

 } else {
   console.log(process.env.NODE_ENV)
   const staticPath = path.join(__dirname, 'dist')
   app.use(express.static(staticPath));
 }

 app.listen(PORT)
 console.log('Open up http://localhost:' + PORT);



via lxm7

No comments:

Post a Comment