【问题标题】:Shrink node_modules directory?缩小 node_modules 目录?
【发布时间】:2021-06-24 06:03:35
【问题描述】:

我以前用过proguardshrink android app packages。它从应用程序依赖项中删除未使用的类和文件,甚至是第 3 方依赖项,从而显着减小包大小。 node/npm 中是否有等价物?

npm prune --production 删除开发依赖项,node-prune 部分删除未使用的文件。但两者都没有从第三方包中完全删除不必要的代码。

【问题讨论】:

  • 你为什么要这样做?由于函数、文件或模块可以根据使用情况或运行的平台动态引用,因此对第 3 方模块中究竟需要什么进行完全准确的静态分析是不可能的。
  • 下载速度?这段代码在哪里运行?
  • @jfriend00 我知道可能存在动态引用,这就是为什么 proguard 允许将其配置为不删除某些类,即使它们看起来未使用。
  • @jfriend00 我收回关于下载速度的看法,我在考虑 android 包,但我还是很好奇 :)
  • 那么,这只是在服务器上运行?我不确定尝试修剪东西是否有任何优势,只有风险。因为 JS 不是类型化和预编译的,你可能会不小心删除某些情况下需要的东西。那么,您想冒这个风险只是为了减少服务器上的磁盘空间使用量?我认为您的时间会花在能够真正改善您的应用的项目上,效果会更好。

标签: node.js npm node-modules proguard shrink


【解决方案1】:

您不能完全删除它,需要node_modules 来运行您的脚本。 您可能会认为存在未使用的文件,但在某些情况下仍需要它们。

所以在做这样的事情时,让我们仔细检查一下。 如果总文件大小是你的事。我推荐使用这个工具: https://github.com/tj/node-prune

它为您提供了一些选项来控制删除或不删除。

【讨论】:

    【解决方案2】:

    您已经在问题中提到了--production 标志和node-prune,所以我将把它们排除在外。 (你也可以看看dmn,和node-prune类似。)

    如果您使用 rollupwebpack 之类的捆绑程序,他们可以使用 tree shaking 删除您不使用的代码。 (我不确定需要多少配置才能使其安全地与node_modules 中的第三方模块一起工作,或者即使这是可能的。)在这种情况下,摇树不会从node_modules 中删除代码尽管。相反,这些工具将所有内容捆绑到一个可执行文件中,并从那里删除未使用的代码。

    【讨论】:

    • 接受这一点,因为它似乎最接近现在的可能性。
    猜你喜欢
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 2022-06-16
    相关资源
    最近更新 更多