V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ymlog
V2EX  ›  程序员

Google Driver 传输类似 node_modules 这样的文件太慢

  •  
  •   ymlog · 2020-08-27 18:14:36 +08:00 · 5600 次点击
    这是一个创建于 1584 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一直在用 google 云,最近把 hexo 生成的博客放在了 google 云里,传输小文件且数量特别多的是很慢;

    网上给出了一种解决方法,就是把文件夹压缩,上传到 google 云后在线解压,然后再同步到本地,速度可以快一倍,我试了一次,结果里面所有中文标题的文件都乱码了

    82 条回复    2020-08-29 16:32:40 +08:00
    ysc3839
        1
    ysc3839  
       2020-08-27 19:23:23 +08:00 via Android
    为什么要传输 node_modules ?
    ymlog
        2
    ymlog  
    OP
       2020-08-27 19:34:14 +08:00
    @ysc3839 因为 hexo 放在了 Google 中备份,hexo 写博客用的,会经常用到而且用的时候需要 node_modules,如果把 node_modules 删掉,下次还得 npm install 装回来,

    就类似这样: https://s1.ax1x.com/2020/08/27/d4hbpd.png
    bokix
        3
    bokix  
       2020-08-27 20:02:21 +08:00
    我是不是可以把我电脑上的 maven 库也放在 Google 中备份一下??疯了
    Lxxyx
        4
    Lxxyx  
       2020-08-27 20:07:11 +08:00
    觉得 npm 慢的话,可以试试看 cnpm 。。
    vcfvct
        5
    vcfvct  
       2020-08-27 20:35:00 +08:00
    Backup package.json 就够了吧, 要非常 consistent 的话再加个 package-lock.json, 新的环境下 npm install 应该比你从 Google Drive 上拉下来快吧.
    zhuweiyou
        6
    zhuweiyou  
       2020-08-27 20:43:04 +08:00   ❤️ 14
    传 node_modules 本身就是个错误的做法。

    如果非要传,可以试试 yarn 的 --pnp 模式,模块会变成 zip 包,而不是散的文件。传起来快
    Cielsky
        7
    Cielsky  
       2020-08-27 20:46:46 +08:00 via Android
    hexo 了,直接传仓库里不就行了,然后用 ci 自己生成博客文件
    PerFectTime
        8
    PerFectTime  
       2020-08-27 22:47:12 +08:00
    node_modules 里面千千万万个文件, 就是个大黑洞
    每次用的时候 install 一下就好了, 没必要备份黑洞
    oneisall8955
        9
    oneisall8955  
       2020-08-27 22:56:50 +08:00 via Android
    这跟 git/svn 上传项目的 node_modules/.class/bundle.js 有什么意义
    ymlog
        10
    ymlog  
    OP
       2020-08-27 23:01:09 +08:00
    @zhuweiyou 如果模块变成 zip 包了,hexo 还能用吗
    masker
        11
    masker  
       2020-08-27 23:07:34 +08:00 via Android   ❤️ 2
    今日份神操作
    ymlog
        12
    ymlog  
    OP
       2020-08-27 23:08:07 +08:00
    @Cielsky hexo 推送到仓库的只有 public 目录,我想把所有文件全部上云
    ymlog
        13
    ymlog  
    OP
       2020-08-27 23:08:28 +08:00
    @PerFectTime 用的次数太频繁了,基本每天一次
    pascalsun
        14
    pascalsun  
       2020-08-27 23:50:27 +08:00
    .........
    ysc3839
        15
    ysc3839  
       2020-08-28 00:31:27 +08:00 via Android
    @ymlog #12 我的做法是 Hexo 整个仓库放在 GitHub 上,通过 GitHub Actions,每次 push 的时候生成网页文件然后提交到网站。
    noe132
        16
    noe132  
       2020-08-28 00:38:18 +08:00   ❤️ 14
    github 北极埋了一堆开源代码

    “90% 的磁带浪费在了 node_modules”
    Hyoban
        17
    Hyoban  
       2020-08-28 00:41:48 +08:00
    只放 source 文件夹就够了
    baobao1270
        18
    baobao1270  
       2020-08-28 00:50:47 +08:00
    建议:配置好 gitignore,把 hexo 文件上传到 GitHub 的 Private 仓库。如果需要多地备份,可以写一个脚本,推送提交后自动转存 Google 。

    我就是这么做的,这是我的 .gitignore 文件:
    db.json
    *.log
    public/
    .deploy/
    node_modules/
    id_rsa
    jiangzm
        19
    jiangzm  
       2020-08-28 00:55:33 +08:00
    @ymlog 每次用的时候 npm install 不是很正常的操作吗, 网络传输 node_modules 本身就是错误的想法。另外还有.git 文件夹也切记不要上传,下载起来很快因为是打包下载再解压的,如果文件夹同步也会异常的慢零碎文件太多了
    hlwjia
        20
    hlwjia  
       2020-08-28 01:05:49 +08:00
    有时看到有这样的操作,我都不知道怪谁
    ericgui
        21
    ericgui  
       2020-08-28 01:16:52 +08:00
    打包之后再传呗
    xmumiffy
        22
    xmumiffy  
       2020-08-28 01:21:40 +08:00 via Android
    真要传那就那 rclone 开几百个 transfers 和 checkers
    xw900812
        23
    xw900812  
       2020-08-28 01:58:26 +08:00
    把 `npm install` 的过程放到 ci cd pipeline 中去,直接传是错误的做法哦。
    starsyork
        24
    starsyork  
       2020-08-28 02:50:51 +08:00 via iPhone
    其实我想问,有啥方法可以让网盘自动不备份 node_mudoles 嘛,反正 google drive 我没找到设置
    skies457
        25
    skies457  
       2020-08-28 02:51:54 +08:00
    目前用过的网盘只有 Dropbox 能高性能地储存 node_modules 。本来理想的情况就是把网盘当驱动器用,跨设备 1:1 同步和备份工作文件,难道在网盘里每创建一个前端项目都要在网盘设置里面 ignore 掉、然后在所有设备上执行 npm install ?这不是花钱买罪受嘛
    linliting45
        26
    linliting45  
       2020-08-28 04:35:44 +08:00 via iPhone
    @skies457 这种不应该用 github ?
    lslqtz
        27
    lslqtz  
       2020-08-28 04:49:32 +08:00   ❤️ 1
    网盘我觉得明明是当备份盘用的,没想到居然会有人当驱动器。。。
    vk42
        28
    vk42  
       2020-08-28 05:17:36 +08:00
    上面的吐槽内容就不重复了,发现没人提压缩包乱码问题,盲猜你是在 Win 下压的 zip 包。为了避这个坑一般 Windows 用户打的 zip 包全都打回去重打……
    Rhinecho
        29
    Rhinecho  
       2020-08-28 06:47:16 +08:00 via iPhone   ❤️ 2
    houzhenhong
        30
    houzhenhong  
       2020-08-28 07:35:06 +08:00 via Android
    @ymlog

    > 如果模块变成 zip 包了,hexo 还能用吗

    能用,可以去了解一下 yarn2 他们做了一个基于 zip 的虚拟文件系统。其实之前 yarn1 的时候也有 pnp 模式,类似 composer 的加载方案。yarn2 才加入了 zip 的功能,目标就是把依赖同时上传能更好的控制,只不过我没有试过,好像 hexo-cli 应该不支持 yarn2 https://github.com/hexojs/hexo-cli/pull/218 反正感觉开源社区对 yarn2 不怎么支持,尤雨溪好像对 yarn2 也是消极态度,他说这个命名不好,因为变化太大了。我觉得以后 yarn2 应该和 pnpm 差不多的状态吧。
    houzhenhong
        31
    houzhenhong  
       2020-08-28 07:40:49 +08:00 via Android
    偏个楼我看到刚才楼上的 pull 的讨论里面有一句话,`That will be complicated & slow, since yarn has no programmatic API.` 不知道以后 yarn 的未来是怎么样呀。
    Osk
        32
    Osk  
       2020-08-28 08:17:28 +08:00 via Android
    其实我觉得并不能全怪楼主神操作,js 的生态中,尤其是 node_modules 这个玩意儿是真的恶心。

    真的恶心!
    真的恶心!
    真的恶心!

    不说备份到网盘,就算是备份到本地 nas 都很坑好么,几百 MB 的文件夹,动辄上百万的文件,坑死人了。
    不备份吧,又要专门去修改备份脚本设置 exclude 规则,有时并不是那么方便。
    备份吧,每次看到日志里面 node_modules 刷屏,血压就骤升。

    其它编程语言很少见这么坑的。
    shoujiaxin
        33
    shoujiaxin  
       2020-08-28 08:51:12 +08:00 via iPhone
    我有一个问题,既然使用这么频繁,为什么要把本地的 node_modules 删掉呢?
    另外,使用频繁的话用 CI 就更方便了吧
    guanhui07
        34
    guanhui07  
       2020-08-28 08:54:42 +08:00
    node_modules 文件目录不要传
    ymlog
        35
    ymlog  
    OP
       2020-08-28 08:57:17 +08:00
    @skies457 我也是这么想的,但是评论一帮人就让我不要传输 node_modules
    ymlog
        36
    ymlog  
    OP
       2020-08-28 08:58:59 +08:00
    @shoujiaxin 没有说把本地 node_modules 删掉,只是放在到 google 网盘,还是要用的
    ysc3839
        37
    ysc3839  
       2020-08-28 09:05:05 +08:00 via Android
    @skies457 @ymlog
    “不传输 node_modules”不代表要把本地的 node_modules 删除呀。
    不传输 node_modules 的话,也只是在新设备上同步时需要安装一次,以后直接用就行了。
    这么做很好地解决了 node_modules 上传太慢的问题。在我看来,等 node_modules 上传半天才是受罪。
    ymlog
        38
    ymlog  
    OP
       2020-08-28 09:08:48 +08:00
    @ericgui 先打包成压缩包,然后在云端解压,最后同步到本地,可以让速度快一倍
    ymlog
        39
    ymlog  
    OP
       2020-08-28 09:10:04 +08:00
    @vcfvct 可以这样,但是如果 node_modules 目录在 hexo/node_modules 这样的目录结构下,GoogleDriver 备份 hexo,不能 ignore node_modules,不像 git 那样好用
    ymlog
        40
    ymlog  
    OP
       2020-08-28 09:11:01 +08:00
    @oneisall8955 因为本地会经常用到 node_modules 里的代码渲染 markdown,如果是 git 上传的话,可以理解为上传之后,可以不再用到了吗
    ymlog
        41
    ymlog  
    OP
       2020-08-28 09:11:32 +08:00
    @noe132 今日份黑色幽默
    ymlog
        42
    ymlog  
    OP
       2020-08-28 09:12:17 +08:00
    @houzhenhong 好的,我尝试一下,非常感谢
    ymlog
        43
    ymlog  
    OP
       2020-08-28 09:12:59 +08:00
    @Osk 确实是这样,这东西也太分散了
    Augi
        44
    Augi  
       2020-08-28 09:14:13 +08:00 via iPhone
    不应该传输 node_modules
    kekxv
        45
    kekxv  
       2020-08-28 09:17:24 +08:00   ❤️ 1
    @ymlog 劝你不要传 node_modules 处理因为小文件太多,还因为 node_modules 并不通用,你在 A 电脑上生成的 node_modules 很有可能在 B 电脑上无法使用,B 电脑还是要把 node_modules 删掉重新生成 node_modules 。
    然后问题就来了,这时候 B 电脑又把 node_modules 上传了,然后 A 电脑同步过来了,然后。。。。。。。。

    另外如果是实时同步,B 电脑刚删好,生成完毕,此时 A 电脑刚好改完代码,同步开启,然后发现 node_modules 被改了,emmmmmm,然后需要把 node_modules 重新生成,但是因为是实时同步,所以很快 B 电脑会发现他的 node_modules 不能用了,于是。。。。。。。

    什么?你说你只在一台电脑上用?那你为什么还要备份 node_modules ?

    什么?多电脑没有不能用的问题,那恭喜你啊,万一以后遇到你可以考虑一下是不是 node_modules 不通用问题。
    12101111
        46
    12101111  
       2020-08-28 09:24:03 +08:00
    可以看一下 hugo, zola 这种单文件生成器,没有 node_modules 这种问题
    Uyuhz
        47
    Uyuhz  
       2020-08-28 09:24:05 +08:00
    我都是 jenkins 自己去 npm install...
    KuroNekoFan
        48
    KuroNekoFan  
       2020-08-28 09:49:34 +08:00
    我觉得比较好的做法是把 package.lock 也提交,然后 npm ci,把 node_modules 加到 repo 里实属弱智
    KuroNekoFan
        49
    KuroNekoFan  
       2020-08-28 09:52:27 +08:00
    如果觉得每个项目一份 node_modules 很讨厌可以考虑 pnpm,当然我觉得每个项目一份 npm 其实也没什么问题
    supuwoerc
        50
    supuwoerc  
       2020-08-28 10:03:55 +08:00
    不管啥环境传这种超多层级的文件都慢吧,为啥不直接保存 package.json 再安装来的直接 =。=
    MrTreasure
        51
    MrTreasure  
       2020-08-28 10:37:39 +08:00
    其实是根本找不到需要手动传输 node_modules 的必要性,不太确定什么场景下是你只传输 package.json,然后在服务器端 npm install 不能解决的。即使像我一样觉得每次不同项目都要拉新的 node_modules,也可以使用 yarn 来安装

    你这样备份 node_modules 本身也不合理,因为有些 node 包会是基于当前的系统环境生成的,比如 node-sass 这些,你同步过去以后也不一定能用
    jaylee4869
        52
    jaylee4869  
       2020-08-28 10:46:22 +08:00
    推荐你用 vercel 或 netlify 。可以 用自己的域名 解析。
    ymlog
        53
    ymlog  
    OP
       2020-08-28 11:06:11 +08:00
    @shoujiaxin Jenkins 构建流水线吗,买的轻量级服务器资源带不动,自己用的又是 windows
    @ysc3839 可以这样,但是如果 node_modules 目录在 hexo/node_modules 这样的目录结构下,GoogleDriver 备份 hexo,不能 ignore node_modules,不像 git 那样好用
    ymlog
        54
    ymlog  
    OP
       2020-08-28 11:07:46 +08:00
    @KuroNekoFan 麻烦看清说明,我是本地也要用
    krixaar
        55
    krixaar  
       2020-08-28 11:40:30 +08:00   ❤️ 1
    Google Drive 目前似乎不能 follow 符号链接,这样就有了个非常简单的处理方法,把 node_modules 挪出去,然后 mklink 回来,既不影响现有的工程(相当于路径没变),又不影响备份(相当于手动 ignore 了)。
    另外这种事儿用 github 开个私有 repo,然后用 github actions 从 npm install 到部署自己服务器上都能直接搞定吧?
    Sharuru
        56
    Sharuru  
       2020-08-28 11:46:43 +08:00
    我琢磨着网盘人家爱咋用咋用。

    不过话说回来,零碎小文件放哪家上传都慢……
    phxsuns
        57
    phxsuns  
       2020-08-28 11:52:36 +08:00
    @ymlog 系统环境不一样,node_modules 装出来也不一样的。保险起见还是需要 npm install 的。
    vanxy
        58
    vanxy  
       2020-08-28 12:16:42 +08:00   ❤️ 1
    想到这个世界上有人在用网盘同步 node_modules, 有人把 node_modules 传到 git 。就很难受...

    不知道有没有人有同样的感觉
    maomaomao001
        59
    maomaomao001  
       2020-08-28 12:30:46 +08:00
    @ymlog 用的时候解压

    传的时候 zip ,用的时候解压
    charlie21
        60
    charlie21  
       2020-08-28 13:04:02 +08:00
    这是一种对于资源的浪费
    mgrddsj
        61
    mgrddsj  
       2020-08-28 13:16:42 +08:00 via Android
    Google 搜索 Google Backup and Sync ignore …,就会出现候选 "ignore node_modules" 了。基本上都是推荐使用第三方 Google Drive 客户端把它 exclude 掉,或者改用 Git 。
    ymlog
        62
    ymlog  
    OP
       2020-08-28 13:44:20 +08:00
    @vanxy 我也知道可以 npm 安装,但是你不理解我的需求
    skies457
        63
    skies457  
       2020-08-28 13:44:41 +08:00
    @linliting45 #25 存档和发布当然用 github (也不应该上传 node_modules ),但是工作环境可以用网盘同步呀
    skies457
        64
    skies457  
       2020-08-28 13:46:07 +08:00
    @lslqtz #26 理想的话应该能从网盘直接启动系统,不要让产品的局限性阻碍了我们的想象力(逃
    skies457
        65
    skies457  
       2020-08-28 13:48:24 +08:00
    @ysc3839 #36 每次 package.json 变动的时候都要在所有设备上重新 npm install 呀。node_modules 上传太久是网盘的错,不是用户的错
    skies457
        66
    skies457  
       2020-08-28 13:50:42 +08:00
    @vanxy #57 我同步了至少 20 个(逃
    ysc3839
        67
    ysc3839  
       2020-08-28 13:55:13 +08:00 via Android
    @skies457 确实是有变动后需要手动更新的问题,不过大概可以通过 IDE 或者其他软件解决。比如用 Git 同步的话,就可以用 git 的 hook 功能。
    node_modules 上传慢是网盘的锅,但是在网盘本身不能解决这个问题,用户又一定要用这个网盘的情况下,只能自己忍受不爽了。
    no1xsyzy
        68
    no1xsyzy  
       2020-08-28 15:17:47 +08:00
    @hlwjia #20 怪 deno 出得太慢(

    node_modules 是有 native 的
    virtualenv 碰上过 WSL 内外不兼容的情况
    ruby 环境有多少 native,吓死人,Github Pages 自动安装依赖,三个里面有两个是 native,全部安装下来甚至缺几个包需要单独安装 ( ruby-dev zlib1g-dev )……
    justin2018
        69
    justin2018  
       2020-08-28 15:22:11 +08:00
    @Osk 确实挺坑 上次 dropbox 同步忘记排除了 同步了几千个文件 而且 很慢~~~
    HangoX
        70
    HangoX  
       2020-08-28 15:38:20 +08:00
    不太明白这个东西为什么一定要上传,hexo 配置好之后这个东西其实一般是固定大小的。
    如果你在多个设备都有使用这个 hexo,每个地方都初始化一遍其实还能接受,你是因为每次都用新设备写文章吗?、
    如果不是,弄个快捷运行的东西双击直接执行 npm 一次,这个成本应该会更低一点
    ymlog
        71
    ymlog  
    OP
       2020-08-28 15:39:49 +08:00
    @HangoX 不想 markdown 文件丢失,于是就同步了 hexo 的目录,但是 node_modules 不能排除在外,Google Driver 应该没有.git ignore 的功能
    hst001
        72
    hst001  
       2020-08-28 15:53:09 +08:00
    我的天,你居然往别人的服务器传黑洞!
    krixaar
        73
    krixaar  
       2020-08-28 16:14:15 +08:00   ❤️ 1
    @ymlog 所以说你到底试没试 mklink ?
    littlewing
        74
    littlewing  
       2020-08-28 17:19:51 +08:00
    下次把 js 源码,linux 源码也传一份
    NoUltimate
        75
    NoUltimate  
       2020-08-28 17:32:44 +08:00
    服务器跑不动可以试试 azure pipline,私有仓库有时间限制,公共仓库好像免费,不过我都是 azure 打包成 docker 镜像然后自己服务器去拉下来
    ymlog
        76
    ymlog  
    OP
       2020-08-28 19:36:54 +08:00
    @krixaar 以前用过软链接和硬链接,感觉不太喜欢,技术上可行,但是本该是一个目录的东西放在不同地方,强迫症难受,现在打算用 yarn,比 npm 快
    ymlog
        77
    ymlog  
    OP
       2020-08-28 19:44:27 +08:00
    @12101111 @Augi @Cielsky @HangoX @Hyoban @KuroNekoFan @Lxxyx @MrTreasure @NoUltimate @Osk

    老哥们,写了个脚本算是最终解决方案吧,先生成渲染 markdown 的环境、用完了删除,有兴趣的可以看一下:
    (如果觉得这里看代码不太行,可以看这个博客 8 月 28 号的更新: http://code.ymlog.cn/post/687d0838.html

    其实刚开始是很反对把 node_modules 删掉的,后来因为这个文件夹太恶心,很多 v2exr 老哥又都建议我删掉,就直接删了,每次渲染的时候再装回来



    # 修改时间:2020/8/25
    # Description:
    # 0 、yarn 安装 node_modules 模块
    # 1 、将本地 hexo 的 markdown 渲染成 html 放到 public 目录
    # 2 、打包 public 目录并上传到云端解压
    # 3 、在云端解压到 /blog/public/ ——该路径是 nginx 的 root 路径
    # 4 、删除 public 、node_modules,删除 7 天前的备份文件
    # 5 、备份当前 hexo 目录


    echo "生成 node_modules"
    yarn install

    echo "generate public"
    hexo g

    echo "删除 node_modules"
    rm -rf ./node_modules

    echo "打包 public 目录"
    tar -zcf public.tar.gz public

    echo "上传 public 目录"
    scp -i "C:\\Users\\ym\\.ssh\\id_rsa" -o "StrictHostKeyChecking=no" public.tar.gz root@huawei:/root/

    echo "解压云端文件"
    ssh -i "C:\\Users\\ym\\.ssh\\id_rsa" -o "StrictHostKeyChecking=no" root@huawei 'rm -rf /blog/public && tar -zxf /root/public.tar.gz -C /blog/'

    echo "清除 public 目录"
    rm -rf public
    rm -fr public.tar.gz

    echo "删除 7 天前的备份"
    find ../backup/ -name hexo_backup_* -ctime +15 -exec rm -rf {} \;

    echo "备份当前 hexo 目录"
    tar -zcf ../backup/hexo_backup_$(date '+%Y-%m-%d').tar.gz *
    ymlog
        78
    ymlog  
    OP
       2020-08-28 19:45:35 +08:00
    那个是删除 15 天前的备份,习惯性的写成了 7 天
    ymlog
        79
    ymlog  
    OP
       2020-08-28 19:46:18 +08:00
    @hst001 今日份幽默,已经删了 node_modules 文件夹了,这玩意儿有毒
    ymlog
        80
    ymlog  
    OP
       2020-08-28 19:47:24 +08:00
    @kekxv 是的,很有道理,已经放弃传输 Node_modules 了
    frantic
        81
    frantic  
       2020-08-29 10:35:46 +08:00
    想起来以前我代码仓库都放到 Document 当中,iCloud 自动同步的时候经常卡死
    wd
        82
    wd  
       2020-08-29 16:32:40 +08:00 via iPhone
    用 Hugo 吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2734 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 08:58 · PVG 16:58 · LAX 00:58 · JFK 03:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.