我正在使用Docker,所以这种情况可能看起来很奇怪。但是我想在开发时将我的整个/data
目录安装在我的docker容器中。
我的/data
文件夹容器my package.json
文件,app
目录和一堆其他内容。
问题是我希望我的node_modules
文件夹不是持久的,只有package.json
文件。
我尝试过几件事,但是package.json
和npm
让我在这里度过了难关......
package.json
文件会破坏npm。 npm尝试在保存时重命名文件,这在挂载文件时是不可能的。/data
)将挂载node_modules文件夹。/data
之外的另一个文件夹中,例如/dist
package.json
放入/data/conf
将/data/conf
作为卷安装,而不是工作。我无法找到在package.json
中指定npmrc
路径的方法。package.json
放入/data/conf
并将其符号化为/data/package.json
将无效。 npm打破符号链接并用文件替换它。在docker容器内来回传输数据是我现在正在做的事情..有点乏味......我也想要一个干净的解决方案..
答案 0 :(得分:7)
正如您已经回答的那样,我认为这可能是目前唯一的解决方案。
在构建Docker镜像时,请执行以下操作:
COPY data/package.json /data/
RUN mkdir /dist/node_modules && ln -s /dist/node_modules /data/node_modules && cd /data && npm install
对于其他东西(比如凉亭,做同样的事情)
COPY data/.bowerrc /data/
COPY data/bower.json /data/
RUN mkdir /dist/vendor && ln -s /dist/vendor /data/vendor && cd /data && bower install --allow-root
最后COPY data/ /data
(因此,当data
发生更改时,您可以使用Dockers缓存而无需安装npm / docker。
您还需要创建所需的符号链接并将它们存储在您的git-repo中。它们在外面会无效,但会在容器内部发挥作用。
使用此解决方案,您可以装载$PWD/data:/data
而无需在容器外部获取npm / bower“垃圾”。您仍然可以将您的映像构建为服务的独立部署..
答案 1 :(得分:5)
一种类似的替代方法是使用NODE_ENV变量而不是创建符号链接。
RUN mkdir -p /dist/node_modules
RUN cp -r node_modules/* /dist/node_modules/
ENV NODE_PATH /dist/node_modules
这里首先为node_modules创建一个新目录,复制所有模块,然后让Node从那里读取模块。
答案 2 :(得分:5)
我已经有这个问题已经有一段时间了,而且已接受的解决方案对我没用*
@Html.DropDownListFor(model => model.EmployeeID,(IEnumerable<SelectListItem>)ViewData["EmployeeName"])
在这种情况下,引擎会创建一个未安装到源目录的卷(请参阅volumes:
- ./:/data
- /data/node_modules
上的Compose reference)。这是最简单的解决方案,并没有要求我做任何符号链接,设置路径等。
作为参考,我的简单Dockerfile看起来像这样:
volumes
(# install node requirements
WORKDIR /data
COPY ./package.json ./package.json
RUN npm install -qq
# add source code
COPY ./ ./
# run watch script
CMD npm run watch
脚本只是watch
)
希望这能够帮助某人并节省数小时的时间,就像它对我一样!
webpack --watch -d
脚本中获取webpack
并在容器内部安装任何内容时创建package.json
文件夹以及我刚安装的任何内容(我运行{{1} }从容器内部获取包更新node_modules
直到下一次重建
答案 3 :(得分:1)
我使用的解决方案是将node_modules文件夹放在/dist/node_modules
中,并从/data/node_modules
创建一个符号链接。我可以在我的Dockerfile中执行此操作,因此它将在构建时使用它,并且我可以将我的符号链接提交到我的git-repo。一切都很顺利..
答案 4 :(得分:0)
也许您可以保存容器,然后使用最小的dockerfile定期重建它
FROM my_container
和包含
的.dockerignore文件/数据/ node_modules
查看文档 http://docs.docker.com/reference/builder/#the-dockerignore-file