在客户端不使用npm部署node.js项目

我想要频繁更新部署一个nodejs项目。 npm在站点不可用,所以我必须打包node_modules。 这工作正常,但需要很长时间才能通过可用的ftp连接发送给客户(每次80MB大部分node_module文件)。 我的工作stream程如下所示:

git clone project npm install # installs all my dev tools which I need for packaging grunt build tar xvzf build.tar.gz build/ 

构build步骤简化了我的代码打包只需要什么。 node_modules文件夹被复制到build文件夹中。 如果我使用npm install --production ,我可以获得更小的占用空间,但却无法摆脱首先构build它的工具。 所以最后,我花了一些努力使我的代码足迹小,但我的工作是通过打包如此大的node_modules树来取消。

我的方法错了吗? 有没有一种更简单的方法来部署npm在生产服务器上不可用或是否有减lessnode_modules文件夹大小的好方法?

更新 :由于写这个答案, npm3 (和 )到达,并夷为平地npm依赖。 这相当node_modules减less了node_modules文件夹的大小(对于典型的项目可能是20% – 30%)。 尽pipe如此,下面的一些提示会减less你的足迹一个数量级。

我已经编制了任何人想要的结果清单

  1. 在服务器上部署没有npm或者
  2. 减lessnode_modules文件夹的占用空间

较小的node_modules占用空间:

  • 使用npm prune –production删除devDependencies并清除额外的模块

    在我的情况下,这个node_modules文件夹大小约20%。

    node_modules文件夹下的大量文件被限制在运行时未使用的less量模块中! 。 清除/删除这些可将占用空间缩小10倍! 例如:业力,凉亭,less和咕噜声。 其中许多是由模块本身使用,并没有在生产build设的地方。 缺点是npm install必须在每次构build之前运行。

  • 使用部分npm包

    许多npm包可用于部分。 例如,安装所有asynclodash只安装你需要的位:例如

Bad: npm install -save lodash async

Good: npm install --save async.waterfall async.parallel lodash.foreach

通常情况下,单独的lodash模块是整个包装的大小的1/100

  • npm-package-minifier可以用来减小node_modules树的大小

    为客户端部署压缩node_modules

    这基本上删除了node_modules树中的大量未使用的文件。 这个工具也会减lessdevDependencies的大小,所以它应该在node_modules的“生产”版本上运行。

减less更新的大小

  • 差异部署

    正如评论中所提到的,更新可能会被拆分成需要依赖性更改或只有业务逻辑发生更改的更新。 我已经尝试了这种方法,它大大减less了大多数更新的占用空间。 但是,这也增加了部署的复杂性。