【问题标题】:Deploying node.js project without npm on client side在客户端部署没有 npm 的 node.js 项目
【发布时间】:2014-10-23 06:07:55
【问题描述】:

我想部署一个经常更新的 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 文件夹大小的好方法?

【问题讨论】:

  • 为什么不使用差异部署流程?当您部署到客户端时,只会改变一些事情。 node_modules 目录中的文件通常不会经常更改。但是当您只有 FTP 访问权限时可能会出现问题,在这种情况下,您需要自己准备差异发布。试试看grunt-newer
  • 谢谢。我正在使用差分方法,但想简化它。感谢您指出 grunt-newer。我会看看这个,看看我是否可以用它来打包新的模块。
  • 除了@raidendev,您还可以通过选择更好的压缩算法来节省带宽并加快部署速度。喜欢LZMA

标签: javascript node.js gruntjs npm


【解决方案1】:

更新:自从写了这个答案,npm3(和 yarn)到了,并且 扁平化的 npm 依赖项。这减小了 node_modules 文件夹相当大(可能是 20% - 30% 典型项目)。尽管如此,下面的一些提示将 将您的足迹减少一个数量级。

我已经为任何想要的人编制了调查结果列表

  1. 在服务器上不使用 npm 进行部署
  2. 减少 node_modules 文件夹的占用空间

更小的 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 的版本。

减少更新的大小

  • 差异化部署

    正如在 cmets 中提到的,更新可以分为需要更改依赖项或仅更改业务逻辑的更新。我已经尝试过这种方法,它大大减少了大多数更新的占用空间。但是,它也增加了部署的复杂性。

【讨论】:

    猜你喜欢
    • 2011-12-03
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 2023-03-28
    • 2013-10-30
    相关资源
    最近更新 更多