繁体   English   中英

准备部署时如何清理node_modules文件夹

[英]How to clean node_modules folder when prepping for deployment

在准备部署代码时,我将如何清理node_modules文件夹。

我正在使用node-webkit创建一个应用程序,并且在捆绑最终版本的应用程序时,由于解压缩过程需要一些时间,因此我希望包含尽可能少的文件。

我查看了npm dedupe并使用npm install --production来删除重复项并仅获取生产文件,但是我仍然留下了Readme文件, benchmarkstestsbuild文件,我不需要。

我想在node_modules文件夹中的每个模块最终node_modulesLICENSE文件(如果存在), package.json以及模块运行所需的任何其他内容,但仅此而已。

问题: 如何自动清理一个SCM提交的node_modules目录有点朝着同一个方向,但它正在谈论提交所以不是我真正想要的。

问题: NPM清洁模块在某种程度上与我的相同,但并不完全相同。

这个答案很有帮助,因为它是dedupe捆绑最终应用程序的更高效版本。

更新
我尝试了从这里链接的自定义模块,但它似乎无法正常工作,即使在一些摆弄之后。

尽管如此,我还没有找到正确的答案。


这是我正在寻找的一个例子。

在我的项目中,我目前有两个依赖项: socket.iosocket.io-client

它们共计15 MB,包含110个文件夹中的550个文件。

手动清理readmemakefileVC++构建文件,如.pdb.obj以及其他不必要的文件我能够将它缩小到2.74 MB ,在73个文件夹中有265个文件。
这只有两个模块。

我想知道是否有办法自动执行此操作,最好是使用npm

此模块尝试智能清理node_modules文件夹:

modclean

安装:

npm install modclean -g

要么

npm install modclean --save-dev

用法:

modclean

它使用一组默认模式从整个依赖关系树中的模块中删除不必要的膨胀。

很好地清理node_modules以便为webkit应用程序部署,这有点困难,因为node_modules目录下的模块安装有或没有测试文件的其他misc文件,所以,如果模块的所有者,已经声明了.npmignore文件使用dir /文件(例如testsexamples当所有者发布其模块时,这些将被排除在打包过程之外,但它将正常存在于存储库(git)中。

在npm包中排除测试代码?

上面的内容留在模块所有者手中,如果他/她“忘记”制作一个,那么包装将包含几乎所有内容。


请注意,由于您不使用socket.iosocket.io-clientdevelopment包,这并不意味着您必须使用npm install socket.io --save-dev ,一个简单的npm install socket.io -V会安装由其所有者上传的生产包。
一个可能的解决办法是让一个grunt任务,清理你的整个node_modules ,你想的那样。

将有两条规则

  • testtests目录或*test*.js文件
  • build目录(不确定它有时可能包含一些必要的二进制文件)
  • history.md

GruntJS


希望我能以某种方式帮助,也看看Tilemill以及他们如何部署他们的应用程序。

使用NPM安装的模块不应包含开发文件(即基准测试,测试等)。 如果包含它们,您应该联系模块维护者并要求将它们添加到.npmignore

注意:在这种情况下,开发文件是指开发实际模块而不是应用程序所需的文件。

之前已经提出过建议,但是在grunt deploy任务可能是一个好主意。 只需确保在清理后test应用程序。 grunt-contrib-clean非常适合清洁。

.npmignoreconnect的一些想法上的文件/目录不应该是在生产包装。

也许你有兴趣在这个小find命令,我已经召集了一段时间。 请注意,这不是一个“万能的”解决方案! 您需要根据您的要求仔细检查。 它适用于node.js环境,肯定会破坏浏览器环境。 我在postinstall脚本中运行作为npm中的postinstall脚本。

不要盲目复制'N PASTE 你被警告了!

find node_modules \( \( -name "dist" -or -name "ts" -or -name "logos" -or -name "min" -or -name "test*" -or -name "doc*" -or -name "tst" -or -name "example*" -or -name "build" -or -name "man" -or -name "benchmark*" \) -and -type d \) -or \
   \( \( -iname "readme*" -or -iname "changelog*" -or -iname "notice*" -or -iname "test*.js" -or -iname "*.min.js" \) -and -type f \) -or \
   \( -path "*moment-timezone/data/unpacked*" -and -type d \)

可以肯定的是,我没有添加最后一行| xargs rm -rf | xargs rm -rf 您可以安全地执行上述命令而不删除任何内容,然后将管道添加到带有rm xargs以使其真正发生。

find命令有什么作用? 我将按模式解释它。

  1. \\( \\( -name "dist" -or -name "ts" -or -name "logos" -or -name "min" -or -name "test*" -or -name "doc*" -or -name "tst" -or -name "example*" -or -name "build" -or -name "man" -or -name "benchmark*" \\) -and -type d \\) =>搜索匹配的目录引号中的文字。 *是通配符。

  2. \\( \\( -iname "readme*" -or -iname "changelog*" -or -iname "notice*" -or -iname "test*.js" -or -iname "*.min.js" \\) -and -type f \\) =>搜索引号中文本匹配的任何文件夹中的文件,无论大小写如何。 特别是"*.min.js"模式对某些人来说可能是危险的。

  3. \\( -path "*moment-timezone/data/unpacked*" -and -type d \\) =>从中移除解压缩的数据。 这也节省了大量空间。

随意改善这个!

我正在考虑将其部署到AWS的elasticbeanstalk。 当我运行eb deploy命令时,它神奇地找到了要上传的文件,并且没有获得任何bower_componentsnode_modules 我想知道如何。

事实证明, eb deploy在引擎盖下调用git archive git archive检出你指定的分支并对所有文件进行压缩。

大概你不会将你的node_modules或bower_components目录提交给git,所以git archive可能是你问题的解决方案。 如果你想避免测试用例和自述文件等等,你可能仍然需要在git中做一些标记。 但是你从一个相当小的列表开始,你显然排除了你要排除的大部分内容。

我想你正在寻找npm prune

npm prune [<name> [<name ...]]

此命令删除“无关”包。 如果提供了包名称,则仅删除与提供的名称之一匹配的包。

无关的包是父包的依赖项列表中未列出的包。

文档https://docs.npmjs.com/cli/prune

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM