在客户端部署没有npm的node.js项目

时间:2014-08-29 08:44:20

标签: javascript node.js gruntjs npm

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

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

构建步骤将我的代码打包仅限于所需的内容。 node_modules文件夹将复制到构建文件夹中。如果我使用npm install --production,我会占用更小的空间,但却错过了我首先需要构建它的工具。所以最后我努力使我的代码占用空间很小,但是我必须打包这么大的node_modules树来解决我的所有工作。

我的方法有误吗?是否有一种更简单的方法可以在生产服务器上没有npm的情况下进行部署,或者是否有一种减小node_modules文件夹大小的好方法?

1 个答案:

答案 0 :(得分:6)

  

更新:由于写了这个答案, npm3 (和 yarn )到了,   扁平的npm依赖关系。这减小了尺寸   node_modules文件夹相当大(可能是20% - 30%   典型项目)。不过,下面会有一些提示   将您的足迹减少一个数量级。

我已经为想要

的人编制了调查结果列表
  1. 在服务器上没有npm进行部署
  2. 减少node_modules文件夹的占用空间
  3. 较小的node_modules足迹:

    • 使用npm prune --production删除devDependencies并清除其他模块

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

      node_modules文件夹下的大量大型文件仅限于少量在运行时未使用的模块!。清除/删除这些可将占地面积减少10倍!例如:业力,凉亭,少和咕噜声。其中许多都是模块本身使用的,并且在模块中没有位置 生产建设。缺点是必须在每次构建之前运行npm install。

    • 使用部分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树的大小

      Compacting node_modules for client-side deployment

      这基本上删除了很多未使用的文件 node_modules树。这个工具会减小尺寸 devDependencies也应该在一个'生产' node_modules的版本。

    减少更新的大小

    • 差异部署

      如评论中所述,更新可能会拆分为需要更改依赖项或仅更改业务逻辑的更新。我尝试过这种方法,它大大减少了大多数更新的占用空间。但是,它也增加了部署的复杂性。