Nodejs npm-dist,提取 node_modules 有用文件
Nodejs npm-dist,提取 node_modules 有用文件
移除 node_modules 无用文件,很多 npm 包加了很多小包,个人觉得不妥,特想精简一下,打包环境适用 有意见和建议,欢迎 V 友反馈
可能无用,毕竟打包工具已经做了 Tree-Shaking,其次如果你做的工作是下载一般 node_modules 再删掉,反而有点脱裤子放屁
npm: 我辛辛苦苦安装的包全给你改坏了。。。下次更新又得全部安装
这个啥用处?没看太懂
楼主自以为对目录做了瘦身
自己遍历文件里面的 require 然后复制被用到的文件,修改路径
粗看一下有以下问题
- 入口文件由 main 决定,并不一定都是 index.js
- require 里面可以不是字符串字面量,无论是随意替换路径还是拷贝文件,都会出问题
- 打包环境适用没理解是什么意思,现代工具均支持 Tree-Shaking
第 1 条有考虑的,第 2 、3 条 require 支持.js 、.json 、.node 后缀,现在复制只支持前两种
这个是针对服务端环境的,也只是个思路,要比 npm 包更快,是我没说明白
在Node.js项目中,node_modules
目录通常包含大量依赖包,其中可能只有部分文件是实际项目所需的。虽然直接手动提取这些文件可能很复杂,但可以通过一些自动化脚本和工具来简化这一过程。
以下是一个基本的Node.js脚本示例,用于遍历node_modules
目录并提取特定包中的文件。这个示例假设你只想提取某些特定包(如express
和lodash
)的特定文件类型(如.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
}
});
}
});
注意:
- 脚本中的
fs.copyFileSync
部分被注释掉了,因为直接复制文件到目标位置需要指定目标路径,这取决于你的具体需求。 - 你可以根据需要扩展这个脚本,例如处理子目录中的文件,或者根据更复杂的条件筛选文件。
- 对于大型项目,建议仔细分析依赖关系,确保不会遗漏重要文件或引入不必要的复杂性。