npm v6.4.1 没有 运行 `prepare` 里面 docker
npm v6.4.1 not running `prepare` inside docker
我正在尝试在 docker 容器中安装一个包,但是 prepare
脚本没有被 运行.
这里有一个 Dockerfile
复制了这个问题:
FROM ubuntu:18.04
# Replace shell with bash so we can source files to use npm
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
RUN apt-get update && apt-get upgrade -y
RUN apt-get install wget git -y
RUN wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
RUN source ~/.nvm/nvm.sh; nvm install v10.12.0; nvm use v10.12.0
RUN mkdir -p /usr/app/
WORKDIR /usr/app/
RUN source ~/.nvm/nvm.sh; npm install jcollard/d3-ng2-service#jcollard/add-dist
以上安装 nvm
并切换到使用 node v10.12.0
和 npm v6.4.1
,然后尝试直接从 github 安装包,这应该会失败。
$ docker build -t npm-hack:latest .
$ docker run --rm -it npm-hack:latest /bin/bash -c 'source ~/.nvm/nvm.sh; npm --version'
6.4.1
$ docker run --rm -it npm-hack:latest /bin/bash -c 'source ~/.nvm/nvm.sh; node --version'
v10.12.0
docker 命令的最后一行 应该 失败。
位于该存储库分支上的 package.json
在这里:https://github.com/jcollard/d3-ng2-service/blob/jcollard/add-dist/package.json#L15
你会看到"prepare": "BREAK BREAK BREAK",
当我 运行 在 docker 容器之外时,这会导致预期的错误:
$ npm install jcollard/d3-ng2-service#jcollard/add-dist
npm ERR! prepareGitDep 1>
npm ERR! prepareGitDep > d3-ng2-service@2.3.0 prepare /home/jcollard/.npm/_cacache/tmp/git-clone-77d32f21
npm ERR! prepareGitDep > BREAK BREAK BREAK
npm ERR! prepareGitDep
npm ERR! prepareGitDep
npm ERR! prepareGitDep 2> npm WARN install Usage of the `--dev` option is deprecated. Use `--only=dev` instead.
npm ERR! prepareGitDep sh: 1: BREAK: not found
npm ERR! prepareGitDep npm ERR! file sh
npm ERR! prepareGitDep npm ERR! code ELIFECYCLE
npm ERR! prepareGitDep npm ERR! errno ENOENT
npm ERR! prepareGitDep npm ERR! syscall spawn
npm ERR! prepareGitDep npm ERR! d3-ng2-service@2.3.0 prepare: `BREAK BREAK BREAK`
npm ERR! prepareGitDep npm ERR! spawn ENOENT
npm ERR! prepareGitDep npm ERR!
npm ERR! prepareGitDep npm ERR! Failed at the d3-ng2-service@2.3.0 prepare script.
npm ERR! prepareGitDep npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
我假设本地有一些配置通知 npm
到 运行 prepare
但我似乎找不到它。任何帮助将不胜感激。
谢谢!
那是一个有趣的兔子洞。就是这个错误:https://github.com/npm/npm/issues/17346。 Prepare 不作为 root 运行。您可以 运行 容器作为非 root 用户,但我只是在问题中使用了修复程序。
我把你的最后一行改成了这个
RUN source ~/.nvm/nvm.sh; npm config set unsafe-perm true; npm install jcollard/d3-ng2-service#jcollard/add-dist
现在它按预期失败了。
我正在尝试在 docker 容器中安装一个包,但是 prepare
脚本没有被 运行.
这里有一个 Dockerfile
复制了这个问题:
FROM ubuntu:18.04
# Replace shell with bash so we can source files to use npm
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
RUN apt-get update && apt-get upgrade -y
RUN apt-get install wget git -y
RUN wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
RUN source ~/.nvm/nvm.sh; nvm install v10.12.0; nvm use v10.12.0
RUN mkdir -p /usr/app/
WORKDIR /usr/app/
RUN source ~/.nvm/nvm.sh; npm install jcollard/d3-ng2-service#jcollard/add-dist
以上安装 nvm
并切换到使用 node v10.12.0
和 npm v6.4.1
,然后尝试直接从 github 安装包,这应该会失败。
$ docker build -t npm-hack:latest .
$ docker run --rm -it npm-hack:latest /bin/bash -c 'source ~/.nvm/nvm.sh; npm --version'
6.4.1
$ docker run --rm -it npm-hack:latest /bin/bash -c 'source ~/.nvm/nvm.sh; node --version'
v10.12.0
docker 命令的最后一行 应该 失败。
位于该存储库分支上的 package.json
在这里:https://github.com/jcollard/d3-ng2-service/blob/jcollard/add-dist/package.json#L15
你会看到"prepare": "BREAK BREAK BREAK",
当我 运行 在 docker 容器之外时,这会导致预期的错误:
$ npm install jcollard/d3-ng2-service#jcollard/add-dist
npm ERR! prepareGitDep 1>
npm ERR! prepareGitDep > d3-ng2-service@2.3.0 prepare /home/jcollard/.npm/_cacache/tmp/git-clone-77d32f21
npm ERR! prepareGitDep > BREAK BREAK BREAK
npm ERR! prepareGitDep
npm ERR! prepareGitDep
npm ERR! prepareGitDep 2> npm WARN install Usage of the `--dev` option is deprecated. Use `--only=dev` instead.
npm ERR! prepareGitDep sh: 1: BREAK: not found
npm ERR! prepareGitDep npm ERR! file sh
npm ERR! prepareGitDep npm ERR! code ELIFECYCLE
npm ERR! prepareGitDep npm ERR! errno ENOENT
npm ERR! prepareGitDep npm ERR! syscall spawn
npm ERR! prepareGitDep npm ERR! d3-ng2-service@2.3.0 prepare: `BREAK BREAK BREAK`
npm ERR! prepareGitDep npm ERR! spawn ENOENT
npm ERR! prepareGitDep npm ERR!
npm ERR! prepareGitDep npm ERR! Failed at the d3-ng2-service@2.3.0 prepare script.
npm ERR! prepareGitDep npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
我假设本地有一些配置通知 npm
到 运行 prepare
但我似乎找不到它。任何帮助将不胜感激。
谢谢!
那是一个有趣的兔子洞。就是这个错误:https://github.com/npm/npm/issues/17346。 Prepare 不作为 root 运行。您可以 运行 容器作为非 root 用户,但我只是在问题中使用了修复程序。
我把你的最后一行改成了这个
RUN source ~/.nvm/nvm.sh; npm config set unsafe-perm true; npm install jcollard/d3-ng2-service#jcollard/add-dist
现在它按预期失败了。