Nodejs npm-dist,提取 node_modules 有用文件

发布于 1周前 作者 htzhanglong 来自 nodejs/Nestjs

Nodejs npm-dist,提取 node_modules 有用文件

移除 node_modules 无用文件,很多 npm 包加了很多小包,个人觉得不妥,特想精简一下,打包环境适用 有意见和建议,欢迎 V 友反馈

https://www.npmjs.com/package/npm-dist

8 回复

可能无用,毕竟打包工具已经做了 Tree-Shaking,其次如果你做的工作是下载一般 node_modules 再删掉,反而有点脱裤子放屁


没用到的 JS 本来就不会被打包 …

npm: 我辛辛苦苦安装的包全给你改坏了。。。下次更新又得全部安装

这个啥用处?没看太懂


楼主自以为对目录做了瘦身
自己遍历文件里面的 require 然后复制被用到的文件,修改路径

粗看一下有以下问题
- 入口文件由 main 决定,并不一定都是 index.js
- require 里面可以不是字符串字面量,无论是随意替换路径还是拷贝文件,都会出问题
- 打包环境适用没理解是什么意思,现代工具均支持 Tree-Shaking

第 1 条有考虑的,第 2 、3 条 require 支持.js 、.json 、.node 后缀,现在复制只支持前两种

这个是针对服务端环境的,也只是个思路,要比 npm 包更快,是我没说明白

在Node.js项目中,node_modules目录通常包含大量依赖包,其中可能只有部分文件是实际项目所需的。虽然直接手动提取这些文件可能很复杂,但可以通过一些自动化脚本和工具来简化这一过程。

以下是一个基本的Node.js脚本示例,用于遍历node_modules目录并提取特定包中的文件。这个示例假设你只想提取某些特定包(如expresslodash)的特定文件类型(如.js文件)。

const fs = require('fs');
const path = require('path');

const targetPackages = ['express', 'lodash'];
const targetExtensions = ['.js'];

const nodeModulesPath = path.join(__dirname, 'node_modules');

targetPackages.forEach(pkg => {
  const pkgPath = path.join(nodeModulesPath, pkg);
  if (fs.existsSync(pkgPath)) {
    fs.readdirSync(pkgPath).forEach(file => {
      if (targetExtensions.includes(path.extname(file))) {
        console.log(`Copying ${path.join(pkgPath, file)}`);
        // 这里可以添加实际的复制逻辑,例如使用fs.copyFileSync
      }
    });
  }
});

注意

  1. 脚本中的fs.copyFileSync部分被注释掉了,因为直接复制文件到目标位置需要指定目标路径,这取决于你的具体需求。
  2. 你可以根据需要扩展这个脚本,例如处理子目录中的文件,或者根据更复杂的条件筛选文件。
  3. 对于大型项目,建议仔细分析依赖关系,确保不会遗漏重要文件或引入不必要的复杂性。
回到顶部