Node 项目瘦身

很多刚刚入门的同学都被 node 项目体积给吓到,拉几个依赖包包项目立马 上百个 MB。
往往你只需要一个轮子的时候 npm 给你拉了 “一辆马车”(一大坨依赖包)

但这个缺点可以解决!

现在大多数依赖包现在都模块化了 打个比方 lodash:

1
2
3
4
5
6
7
8
9
10
// Load the full build.
var _ = require('lodash');
// Load the core build.
var _ = require('lodash/core');
// Load the FP build for immutable auto-curried iteratee-first data-last methods.
var fp = require('lodash/fp');

// Load method categories.
var array = require('lodash/array');
var object = require('lodash/fp/object');

解决方案1:

用 webpack 打包!具体思路就是 把 lodash 这样可以打包的库加到 devDependency,把不能打包的 mysql2 这样的库添加到 dependency 里。最后在 webpack 打包的时候和他说忽略 dependency 里这些不能的库。

现在把你打包好的 项目(index.js)和 package.json 上传到服务器。服务器只会安装 package.json dependency 的库。体积最少可以减 50%。

webpack config.json

1
2
3
4
5
6
7
const nodeExternals = require('webpack-node-externals');
commonConfig = {
... // 其他代码
target: 'node', // in order to ignore built-in modules like path, fs, etc.
externals: [nodeExternals()], // 忽略在 package.json dependency 的模块
};
module.exports = commonConfig;

package.json

1
2
3
4
5
6
7
8
9
10
{
"devDependencies": {
// 可以打包的依赖包
lodash
},
"dependencies": {
// 不 可以打包的依赖包
mysql2
},
}

解决方案2:

用比如 zeit/ncc 这些node 打包📦工具