如何让Grunt livereload在Docker中工作?
我试图在Windows中使用Docker作为开发环境。
我正在开发的应用程序使用Node,NPM和Bower设置开发工具,使用Grunt来运行它的任务,并包含实时重新加载,以便在代码更改时更新应用程序。 相当标准。 它工作正常以外的Docker,但我一直运行到Grunt错误Fatal error: Unable to find local grunt.
不pipe我在Docker里面怎么做。
我最近的工作是在构build时将所有npm和bower依赖项安装到图像中的应用程序目录中,并将应用程序的Gruntfile.js
复制到该目录。
然后在Docker-Compose中创build一个链接到主机应用程序的卷,并要求Grunt使用Grunt的--base
选项来观看该卷。 它仍然不会工作。 我仍然得到致命的错误。
以下是Docker文件的问题:
Dockerfile:
# Pull base image. FROM node:5.1 # Setup environment ENV NODE_ENV development # Setup build folder RUN mkdir /app WORKDIR /app # Build apps #globals RUN npm install -g bower RUN echo '{ "allow_root": true }' > /root/.bowerrc RUN npm install -g grunt RUN npm install -g grunt-cli RUN apt-get update RUN apt-get install ruby-compass -y #locals ADD package.json /app/ ADD Gruntfile.js /app/ RUN npm install ADD bower.json /app/ RUN bower install
泊坞窗,compose.yml:
angular: build: . command: sh /host_app/startup.sh volumes: - .:/host_app net: "host"
startup.sh:
#!/bin/bash grunt --base /host_app serve
我实际上可以在Docker中运行应用程序的唯一方法是在构build时将所有文件复制到映像中,然后在那里创build开发依赖关系,然后针对复制的文件运行Grunt。 但是,我必须在每次更改应用程序中的任何内容时运行新的构build。
一定有办法吗? 我的Django应用程序能够在Docker中实时重新加载没有问题,根据Docker自己的Django快速启动说明 。 所以我知道实时重新加载可以与Docker一起工作。
PS:我已经尝试在卷上使用--gruntfile
并使用Grunt的--gruntfile
选项,但仍然崩溃。 我也尝试在共享卷中创buildDocker-Compose时间依赖关系,但是遇到npm错误,需要解压tars。 我觉得虚拟机无法处理在共享文件系统和扼stream器上运行的数据量,或者Windows文件系统可能无法正确存储Linux文件。 或者其他的东西。