npm 如何在Mac上的Dropbox中递归地忽略node_modules

djmepvbi  于 2023-08-06  发布在  Mac
关注(0)|答案(1)|浏览(155)

我想保留我的所有节点项目保存在Dropbox中,除了我想排除所有node_modules目录同步到Dropbox。
我曾经通过将这些目录符号链接在不同的位置来实现这一点,但最近的npm版本已经通过不允许npm_modules成为符号链接来破坏了这种能力。

slwdgvem

slwdgvem1#

以下命令将查找并添加Dropbox中的所有顶级node_module目录。也就是说,它将在另一个node_modules目录中添加node_module目录,而不是node_module目录(因为顶级目录已经被忽略了)。

find ~/Dropbox  -type d | grep 'node_modules$' | grep -v '/node_modules/' | xargs -I {} -t -L 1 xattr -w com.dropbox.ignored 1 "{}"

字符串
命令分解:

  • 查找~/Dropbox中的所有目录
  • 使用grep筛选仅以node_modules结尾的目录
  • 使用grep从这些目录中排除还包含node_modules/的目录**
  • 使用xargs将此目录作为参数传递
  • xattr命令来告诉dropbox忽略它
  • 如果一个目录以node_modules结尾,但也包含node_modules/,则该目录包含在更高级别的node_modules目录中,因此我们可以跳过它,因为我们已经忽略了更高级别的目录。

感谢@shuckster提供以下建议,消除了额外的grep步骤:
-prune find选项可以比两个grep管道更快地执行上述任务:

find ~/Dropbox -name node_modules -prune | xargs -I {} -t -L 1 xattr -w com.dropbox.ignored 1 "{}"


完整的命令explained here
感谢@shuckster提供以下bash函数,该函数将在npm安装后自动运行
另外,我发现在我的.bashrc中为npm创建一个函数来在安装后执行权限更新是很有帮助的:

npm() {
  case "$1" in
    "install"|"i"|"ci")
      command npm "$@"

      if [[ $? -eq 0 && -d ./node_modules ]]; then
        xattr -w com.dropbox.ignored 1 ./node_modules
        echo "Added Dropbox-ignore permission to node_modules"
      fi
      ;;
    *)
      command npm "$@"
      ;;
  esac
}

相关问题