有最小化 node_modules 的工具吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sneezry
V2EX    Node.js

有最小化 node_modules 的工具吗

  •  
  •   sneezry 2018-05-22 15:37:34 +08:00 6987 次点击
    这是一个创建于 2729 天前的主题,其中的信息可能已经有所发展或是发生改变。
    node_modules 的体积非常庞大,但是里面有很多不必要的东西,比如 ts 文件啊,md 文件啊,真正用到的 js 并没那么大。还有的 module 是同时提供了 js 和 min.js ,也是没有必要的。那么有没有一个工具可以 clean up 一下 node_modules 呢,感觉可以压缩很大的空间。
    32 条回复    2018-05-31 10:55:00 +08:00
    duan602728596
        1
    duan602728596  
       2018-05-22 15:49:52 +08:00 via iPhone   1
    自己写过一个工具:node-modules-clean,你可以试一试。https://github.com/duan602728596/node-modules-clean
    htfy96
        2
    htfy96  
       2018-05-22 15:49:56 +08:00 via Android   2
    yarn autoclean
    crs0910
        3
    crs0910  
       2018-05-22 16:29:45 +08:00 via Android   1
    tj 有个 go 写的工具 忘记叫啥了
    crs0910
        4
    crs0910  
       2018-05-22 16:30:23 +08:00 via Android   1
    对了 现在 npm 挂了 装不了包
    cxbig
        5
    cxbig  
       2018-05-22 16:34:01 +08:00   1
    空间占用主要是出于何种考虑?本机开发无所谓的吧?
    我们线上服务器部署完,生成的文件一般放到 public 下的子目录,然后把这个 node_modules 直接删掉。
    yhxx
        6
    yhxx  
       2018-05-22 16:36:15 +08:00
    @cxbig 这样的话每次部署都要重新 npm install 一遍?
    crs0910
        7
    crs0910  
       2018-05-22 16:38:55 +08:00   1
    sneezry
        8
    sneezry  
    OP
       2018-05-22 16:40:10 +08:00
    @cxbig #5 我们在做 vscode 扩展,node_modules 最后会包进去。目前整个包是 9.4MB ,node_modules 占了 7 兆多。本来空间不是大问题,但是考虑到下载速度这就是个问题了。大部分 vscode 扩展是点了安装马上就可以 work,我们这个点了 vscode 没反应,因为在后台下载呢。
    cxbig
        9
    cxbig  
       2018-05-22 16:53:28 +08:00
    @yhxx 是的,我们的 web 项目部署有专用机器,测试开绿灯以后,repo 那边的 hook 会呼叫这台机器打包最新版本。不必要的文件都不会被打包的。
    cxbig
        10
    cxbig  
       2018-05-22 16:54:07 +08:00
    @sneezry 啊,这个领域不大了解。抱歉没有进一步的建议。
    yhxx
        11
    yhxx  
       2018-05-22 17:25:37 +08:00
    @cxbig 这样的话部署一次 5 分钟的节奏?
    感觉还是增量 install 更合理一点
    hahastudio
        12
    hahastudio  
       2018-05-22 17:39:56 +08:00 via Android   1
    用 Webpack 之类的编译一下?
    cxbig
        13
    cxbig  
       2018-05-22 18:09:03 +08:00   1
    @yhxx 我这里没那么夸张,自动部署一次流程 node 部分大概不超过 30 秒。用的是 AWS EC2 m4.large
    项目服务器是不装 node 组件的,部署服务器跑完了打包放 S3,呼叫 CodeDeploy 部署到线上机器,线上机器部署 1 ~ 2 秒就搞定了。
    AllOfMe
        14
    AllOfMe  
       2018-05-22 18:13:39 +08:00
    讲究
    Rocka
        15
    Rocka  
       2018-05-22 19:02:56 +08:00   2
    标准的解决方案不应该是用 Rollup 或者 Webpack 打包一下么
    Rocka
        16
    Rocka  
       2018-05-22 19:04:18 +08:00
    或者 TJ 的这个工具 https://github.com/tj/node-prune
    summerqing
        17
    summerqing  
       2018-05-22 20:01:04 +08:00
    知道哪些文件不需要了,为啥觉得 gitignore 一下就哦了?
    sneezry
        18
    sneezry  
    OP
       2018-05-22 20:26:53 +08:00
    @summerqing 其实是大部分 node module 都没有正确使用.npmignore。我和 ray 还有 zhiqing 正在考虑要不要像 @types 那样帮常用 node module 补上.npmignore
    hxsf
        19
    hxsf  
       2018-05-22 21:50:14 +08:00
    @sneezry #18 补充 npmignore 这个事情不太可行。

    比如一个通用模块同时提供 .min.js 和 .js 的,前端使用的话,正常是通过构建工具把 .min.js 拷贝到 输出目录,或者直接把 .js 按需合并进 bundle.js 这个时候你排除哪个都不好。

    另外,你帮别人补 npmignore 是提 pr 的形式? 如果是 @types 的形式,那 包已经下好了,你补的 ignore 又怎么发挥作用呢?
    sneezry
        20
    sneezry  
    OP
       2018-05-22 22:01:58 +08:00
    @hxsf 再发布个工具,根据我补的 ignore 开始删。我也很绝望的
    hxsf
        21
    hxsf  
       2018-05-22 23:14:41 +08:00
    @sneezry #20 vsce 发布的时候会根据 npmignore (没有就继承 gitignore ) 忽略 node_modules 下的东西
    用户下载插件后,会根据 package.json 重新安装依赖的啊。不是很理解为什么你要把 node_modules 也打包进去啊
    sneezry
        22
    sneezry  
    OP
       2018-05-22 23:41:09 +08:00 via iPhone
    @hxsf vsc 扩展会自动安装依赖的么?这个我还没试过。不过即使可以,npm install 岂不是更慢
    hxsf
        23
    hxsf  
       2018-05-23 00:11:25 +08:00
    @sneezry #22 sorry,刚刚重新看了下,atom 的插件会这么做。

    vscode 是把项目目录,和依赖(貌似默认不打包开发依赖)一起打包。然后通过 CDN ( gallerycdn.vsassets.io )分发。

    能说下是什么依赖吗?
    我注意到 比如 eslint 扩展,其实并没有打包 eslint,而是找项目目录或者全局的 eslint 来使用。
    如 go 扩展,其实安装后会检测环境中有没有一些关于 go 的工具,然后提示用户主动安装。
    或许可以通过这种方式进行体积的缩减。。

    或者简单点,直接写一份 .vsceignore 好了。
    FrankFang128
        24
    FrankFang128  
       2018-05-23 00:13:27 +08:00
    npm 设计的时候就应该用白名单机制,而不是 npmignore 黑名单机制。
    M4ster
        25
    M4ster  
       2018-05-23 00:21:23 +08:00
    sneezry
        26
    sneezry  
    OP
       2018-05-23 01:10:16 +08:00 via iPhone
    @FrankFang128 好像 package.json 里有个 file 字段是白名单。问题是没几个开发者认真对待 file 和 npmignore。我发现 lodash 做得是比较好的。
    sneezry
        27
    sneezry  
    OP
       2018-05-23 01:10:40 +08:00 via iPhone
    @M4ster 这个好像和我的需求不 match
    orzfly
        28
    orzfly  
       2018-05-23 04:19:44 +08:00 via Android
    之前就有人提到了,我还是觉得挺好奇的...

    Webpack/Rollup 打包一下不能满足你的原始需求嘛?
    vghdjgh
        29
    vghdjgh  
       2018-05-23 07:06:40 +08:00
    h1367500190
        30
    h1367500190  
       2018-05-23 11:59:22 +08:00
    题外话: 为什么界面是黑的?
    Kokororin
        31
    Kokororin  
       2018-05-23 17:38:00 +08:00
    .vscodeignore
    XGHeaven
        32
    XGHeaven  
       2018-05-31 10:55:00 +08:00
    其实你们在乎包体积最大的问题在于 Node.js 开发的时候包是本地安装的。而不像是 Python/Ruby 全局安装。

    所以我觉得不如引入一个新的管理工具,这个工具会自动将所有的包安装到全局,然后软连接到本地来。
    对于需要编译的包,那么还是选择本地安装比较好。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1071 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 23:10 PVG 07:10 LAX 15:10 JFK 18:10
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86