首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何防止npm在运行"npm“时创建~/.npm目录?

如何防止npm在运行"npm“时创建~/.npm目录?
EN

Stack Overflow用户
提问于 2018-02-16 01:29:29
回答 1查看 1.1K关注 0票数 5

我有一个Vue.js项目,我正在尝试使用node:latest容器在Docker中构建这个项目。下面是我的Makefile中安装项目所需的包的相关行:

代码语言:javascript
运行
复制
CWD = $(shell pwd)
UID = $(shell id -u)
GID = $(shell id -g)

# ...

sometarget:
    docker run \
        --rm \
        -e HOME=/home/node \
        -u ${UID}:${GID} \
        -v ${CWD}:/usr/src/app \
        -w /usr/src/ui \
        node:latest \
        npm install

注意:通过重写用户和组ID,我能够确保npm install创建的文件具有正确的所有权,从而允许当前用户随后运行make clean

npm install调用尝试创建~/.npm。但是,如果当前用户和组ID与容器中的node用户的ID不匹配,我将得到一个错误:

代码语言:javascript
运行
复制
npm ERR! path /home/node/.npm
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall mkdir
npm ERR! Error: EACCES: permission denied, mkdir '/home/node/.npm'

如果可能的话,我希望npm完全跳过/home/node/.npm的创建。是否有阻止创建此目录的标志?容器是短暂的,因此保存目录的内容没有价值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-16 04:30:50

来自github问题

简单来说,答案是否定的,不可能绕过CLI的缓存。

基本上,npm安装本质上是:

  1. 用请求的包填充缓存
  2. 从缓存中提取

有鉴于此,您的选项可能会更改为:

  1. (作为node用户) npm install && npm cache clean
  2. chown -R "$UID:$GID" node_modules

另一种选择是将临时目录挂载为用户(假设TMP_DIR是使用mktmp -d或其他类型的):

代码语言:javascript
运行
复制
    -v $TMP_DIR:/home/node \
    -e HOME=/home/node \

挂载目录将存在,并将由用户拥有,因此它将是可写的。

还有一个选项(因为您根本不关心缓存目录)是将HOME设置为临时目录(临时目录设置了粘性位,这样任何人都可以写):

代码语言:javascript
运行
复制
    -e HOME=/tmp \
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48818914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档