我想部署一个频繁更新的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文件夹大小的好方法?
答案 0 :(得分:6)
更新:由于写了这个答案, npm3 (和 yarn )到了, 扁平的npm依赖关系。这减小了尺寸
node_modules
文件夹相当大(可能是20% - 30% 典型项目)。不过,下面会有一些提示 将您的足迹减少一个数量级。
我已经为想要
的人编制了调查结果列表使用npm prune --production删除devDependencies并清除其他模块
在我的情况下,此node_modules文件夹大小约为20%。
node_modules
文件夹下的大量大型文件仅限于少量在运行时未使用的模块!。清除/删除这些可将占地面积减少10倍!例如:业力,凉亭,少和咕噜声。其中许多都是模块本身使用的,并且在模块中没有位置
生产建设。缺点是必须在每次构建之前运行npm install。
使用部分npm包
许多npm包都有部分可用。例如,
安装所有async
或lodash
只安装你的位
需要:例如
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的版本。
差异部署
如评论中所述,更新可能会拆分为需要更改依赖项或仅更改业务逻辑的更新。我尝试过这种方法,它大大减少了大多数更新的占用空间。但是,它也增加了部署的复杂性。