I want to tree shake lodash
as well as my unused multiply
function from the generated bundle from webpack
I have 2 main files app.js
& math.js
It contains the following code -
app.js
import map from lodash/map;
import { sum } from ./math;
console.log(💩);
console.log(`2 + 3 = ${sum(2, 3)}`);
map([1, 2, 3], x => {
console.log(x);
});
math.js
export const sum = (a, b) => a + b;
export const multiply = (m, n) => m * n;
webpack.config.js
const path = require(path);
const webpack = require(webpack);
const UglifyJSPlugin = require(uglifyjs-webpack-plugin);
const Jarvis = require(webpack-jarvis);
let plugins = [new Jarvis()];
if (process.env.NODE_ENV === production) plugins.push(new UglifyJSPlugin());
const config = {
entry: ./app.js,
output: {
path: path.resolve(__dirname, dist),
filename: bundle.js
},
module: {
rules: [
{
test: /.js$/,
exclude: /node_modules/,
use: babel-loader
}
]
},
plugins
};
module.exports = config;
My npm
script look like -
scripts: {
dev: webpack --optimize-minimize --mode development,
dev:watch: webpack --watch --optimize-minimize --mode development,
prod: webpack -p --optimize-minimize --mode production,
prod:watch: webpack -p --watch --optimize-minimize --mode production,
start: npm run prod,
clean: rm -rf dist
}
The complete code is available at https://github.com/deadcoder0904/webpack-treeshake
I've tried using UglifyJSPlugin but in the generated bundle it still shows my unused multiply
function from math.js
. Also, the production
bundle generated from npm run prod
remains 20kB
which is a lot & I see a lot of lodash
stuff included as well.