首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Node.js
Express
PPA for Ubuntu
ppa:chris-lea/node.js
V2EX  ›  Node.js

有最小化 node_modules 的工具吗

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

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

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

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

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

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

    Webpack/Rollup 打包一下不能满足你的原始需求嘛?
        30
    h1367500190   269 天前
    题外话: 为什么界面是黑的?
        31
    Kokororin   269 天前
    .vscodeignore
        32
    XGHeaven   261 天前
    其实你们在乎包体积最大的问题在于 Node.js 开发的时候包是本地安装的。而不像是 Python/Ruby 全局安装。

    所以我觉得不如引入一个新的管理工具,这个工具会自动将所有的包安装到全局,然后软连接到本地来。
    对于需要编译的包,那么还是选择本地安装比较好。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   829 人在线   最高记录 4346   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 19:37 · PVG 03:37 · LAX 11:37 · JFK 14:37
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1