xeo*_*eor 8 node.js npm docker
我正在使用Docker,所以这种情况可能看起来很奇怪.但我想/data在开发时将我的整个目录安装在我的docker容器中.
我的/data文件夹容器我的package.json文件,app目录和一堆其他东西.问题是我希望我的node_modules文件夹不是持久性的,只是package.json文件.
我已经尝试了几件事情,但package.json和npm这里给我很难...
package.json直接挂载文件会破坏npm.npm尝试在保存时重命名文件,这在安装文件时是不可能的./data)将挂载node_modules文件夹./data,例如/distpackage.json在/data/conf安装/data/conf的卷,而不是不会工作.我找不到任何方法来指定package.json路径npmrc.package.json在/data/conf和符号链接它/data/package.json不会工作.npm打破符号链接并用文件替换它.在docker容器内来回传输数据是我现在正在做的事情.有点单调乏味......我也想要一个干净的解决方案..
小智 7
正如您已经回答的那样,我认为这可能是目前唯一的解决方案.
在构建Docker镜像时,请执行以下操作:
COPY data/package.json /data/
RUN mkdir /dist/node_modules && ln -s /dist/node_modules /data/node_modules && cd /data && npm install
Run Code Online (Sandbox Code Playgroud)
对于其他东西(比如凉亭,做同样的事情)
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
Run Code Online (Sandbox Code Playgroud)
而COPY data/ /data在结束(这样你就能够使用码头工人缓存和不必做NPM /泊坞窗安装时,有一个变化data.
您还需要创建所需的符号链接并将它们存储在您的git-repo中.它们在外部无效,但会在容器内部发挥作用.
使用此解决方案,您可以安装您$PWD/data:/data的容器,而无需在容器外部获取npm/bower"垃圾".您仍然可以将您的映像构建为服务的独立部署.
一种类似的替代方法是使用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从那里读取模块.
我已经有这个问题了一段时间了,接受的解决方案对我不起作用*
volumes:
- ./:/data
- /data/node_modules
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Engine会创建一个未安装到源目录的卷(请参阅Compose reference on volumes).这是最简单的解决方案,并不要求我做任何符号链接,设置路径等.
作为参考,我的简单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
Run Code Online (Sandbox Code Playgroud)
(watch剧本只是webpack --watch -d)
希望这能够帮助某人并节省数小时的时间,就像它对我一样!
webpack从我的package.json脚本开始工作并在容器内部安装任何东西时创建了node_modules我刚刚安装的文件夹(我npm i --save [packages]从容器内部运行以获取包更新package.json直到下一次重建)
| 归档时间: |
|
| 查看次数: |
3778 次 |
| 最近记录: |