npm package.json和docker(挂载......)

xeo*_*eor 8 node.js npm docker

我正在使用Docker,所以这种情况可能看起来很奇怪.但我想/data在开发时将我的整个目录安装在我的docker容器中.

我的/data文件夹容器我的package.json文件,app目录和一堆其他东西.问题是我希望我的node_modules文件夹不是持久性的,只是package.json文件.

我已经尝试了几件事情,但package.jsonnpm这里给我很难...

  • package.json直接挂载文件会破坏npm.npm尝试在保存时重命名文件,这在安装文件时是不可能的.
  • 挂载父文件夹(/data)将挂载node_modules文件夹.
  • 我找不到任何配置选项将node_modules放在另一个文件夹外面/data,例如/dist
  • package.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"垃圾".您仍然可以将您的映像构建为服务的独立部署.


Den*_*ger 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从那里读取模块.


agi*_*ur5 5

我已经有这个问题了一段时间了,接受的解决方案对我不起作用*

我找到了这个链接,其中有一个编辑指向这里,这确实对我有用:

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直到下一次重建)