npm package.json和docker(安装它…)
我正在使用Docker,所以这种情况可能看起来很奇怪。 但是我希望我的整个/data
目录被安装在我的docker容器里面。
我的/data
文件夹容器我的package.json
文件,一个app
目录和一堆其他的东西。 问题是,我希望我的node_modules
文件夹不是持久的,只有package.json
文件。
我已经尝试了一些东西,但package.json
和npm
在这里给我一个很难的时间…
- 直接挂载
package.json
文件会破坏npm。 npm尝试在保存时重命名文件,这是挂载文件时不可能的。 - 挂载父文件夹(
/data
)将挂载node_modules文件夹。 - 我找不到任何configuration选项将node_modules放置在
/data
,example/dist
之外的另一个文件夹中 - 把
package.json
放在/data/conf
将/data/conf
挂载为一个卷,而不会工作。 我不能find任何方式来指定npmrc
的package.json
path。 - 将
package.json
放在/data/conf
并将其/data/package.json
到/data/package.json
无法正常工作。 npm打破了符号链接,并用文件replace它。
从Docker容器中来回复制数据是我现在正在做的事情..有点乏味..我也想要一个干净的解决scheme..
正如你已经回答,我认为这可能是目前唯一的解决scheme。
在构buildDocker镜像时,请执行以下操作:
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
(这样您就可以使用Dockerscaching,而不必在data
发生变化时执行npm / docker安装。
您还需要创build您需要的符号链接并将它们存储在您的git-repo中。 它们在外面是无效的,但是在你的容器内部会发生作用。
使用这个解决scheme,你可以挂载你的$PWD/data:/data
而不会在你的容器外面获得npm / bower“垃圾”。 而且您仍然可以将您的图像作为您的服务的独立部署来构build。
一个类似的替代方法是使用NODE_ENVvariables而不是创build一个符号链接。
RUN mkdir -p /dist/node_modules RUN cp -r node_modules/* /dist/node_modules/ ENV NODE_PATH /dist/node_modules
在这里,您首先为node_modules创build一个新目录,复制所有模块,然后让Node从这里读取模块。
我已经有一段时间了这个问题,而接受的解决scheme不适合我*
我发现这个链接 ,这里有一个编辑指向,这确实为我工作:
volumes: - ./:/data - /data/node_modules
在这种情况下,引擎会创build一个卷(请参阅卷上的撰写参考 ),该volumes
未装载到您的源目录中。 这是最简单的解决scheme,并不需要我做任何符号链接,设置path等。
作为参考,我简单的Dockerfile看起来像这样:
# 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
)
希望这能够帮助别人,并为我节省数小时的时间!
'*'=我不能让我的package.json
脚本的webpack
工作,并安装任何东西,而在容器内创buildnode_modules
文件夹与我刚刚安装(我运行npm i --save [packages]
从容器内得到包更新package.json
直到下一次重build)
我使用的解决scheme是将node_modules文件夹放在/dist/node_modules
,并从/data/node_modules
build立一个符号链接。 我可以在我的Dockerfile中做到这一点,所以它会在构build时使用它,我可以提交我的符号链接到我的git回购。 一切都很好。
也许你可以保存你的容器,然后用最小的dockerfile定期重build它
FROM my_container
和一个.dockerignore文件包含
/数据/ node_modules
请参阅文档http://docs.docker.com/reference/builder/#the-dockerignore-file