<p>I've been messing around with kubernetes and I'm trying to setup a development environment with minikube, node and nodemon. My image works fine if I run it in a standalone container, however it crashes with the following error if I put it in my deployment.</p>

<pre><code>yarn run v1.3.2
$ nodemon --legacy-watch --exec babel-node src/index.js
/app/node_modules/.bin/nodemon:2
'use 
^^^^^
 SyntaxError: Invalid or unexpected token
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:599:28)
    at Object.Module._extensions..js (module.js:646:10)
    at Module.load (module.js:554:32)
    at tryModuleLoad (module.js:497:12)
    at Function.Module._load (module.js:489:3)
    at Function.Module.runMain (module.js:676:10)
    at startup (bootstrap_node.js:187:16)
    at bootstrap_node.js:608:3
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
</code></pre>

<p>I have a <code>dev</code> command in my package.json as so </p>

<pre><code>"dev": "nodemon --legacy-watch --exec babel-node src/index.js",
</code></pre>

<p>My image is being built with the following docker file</p>

<pre><code>FROM node:8.9.1-alpine

WORKDIR /app

COPY . /app/

RUN cd /app &amp;&amp; yarn install
</code></pre>

<p>and my deployment is set up with this</p>

<pre><code>---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  labels:
    app: nodeapp
  name: nodeapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nodeapp
  template:
    metadata:
      labels:
        app: nodeapp
    spec:
      containers:
      - name: nodeapp
        imagePullPolicy: Never
        image: app:latest
        command:
        - yarn
        args:
        - run
        - dev
        ports:
          - containerPort: 8080
        volumeMounts:
        - name: code
          mountPath: /app
      volumes:
      - name: code
        hostPath:
          path: /Users/adam/Workspaces/scratch/expresssite
---
apiVersion: v1
kind: Service
metadata:
  name: nodeapp
  labels:
    app: nodeapp
spec:
  selector:
    app: nodeapp
  ports:
  - name: nodeapp
    port: 8080
    nodePort: 30005
  type: NodePort
---
</code></pre>

<p>It's obviously crashing on the <code>'use strict'</code> in the nodemon binstub, but I have no idea why. It works just fine as a standalone docker container. The goal is to have nodemon restart the node process in each pod when I save changes for development, but I'm really not sure where my mistake is.</p>

<p>EDIT:</p>

<p>I have narrowed it down slightly. It is mounting the <code>node_modules</code> from the file host and this is what is causing it to crash. I do have a .dockerignore file setup. Is there a way to either get it to work like this (so if I run <code>npm install</code> it will pickup the changes) or is there a way to get it to use the node_modules that were installed with the image?</p>

<p>There are several issues when mounting node_modules fro your local computer to a container, e.g.:</p>

<p>1) node_modules has local symlinks which will not easily be resolvable inside your container.</p>

<p>2) If you have dependencies which rely on native binaries, they will be compiled for the operating system where you installed the dependencies on. If you mount them to a different OS, there will be issues running these binaries. Are you running <code>npm install</code> on Win/Mac and mount it to the linux based container build from the image above? Then, that is most likely your problem.</p>

<p><strong>We experienced the exact same problems in our team while developing software directly inside Kubernetes pods/containers. That's why we started an open source project called DevSpace CLI: <a href="https://github.com/covexo/devspace" rel="nofollow noreferrer">https://github.com/covexo/devspace</a></strong></p>

<p>The DevSpace CLI can establish a reliable and super fast 2-way code sync between your local folders and folders within your dev containers (works with any Kubernetes cluster, any volume and even with ephemeral / non-persistent folders) and it is designed to work perfectly with hot reloading tools such as nodemon. Let me know if it works for you or if there is anything you are missing.</p>
