Skip to content

Use ncc to bundle webpack#6347

Merged
dav-is merged 40 commits into
canaryfrom
next-ncc
Apr 26, 2019
Merged

Use ncc to bundle webpack#6347
dav-is merged 40 commits into
canaryfrom
next-ncc

Conversation

@dav-is
Copy link
Copy Markdown
Contributor

@dav-is dav-is commented Feb 19, 2019

This will bundle webpack with next using ncc

Comment thread packages/next/build/webpack-config.js Outdated
@wtgtybhertgeghgtwtg
Copy link
Copy Markdown
Contributor

Please forgive me for my ignorance in the matter, but I couldn't find any relevant Issues. Outside of avoiding errors when the user has another version of webpack installed, are there benefits to this approach? It'll likely increase install size (since webpack's dependencies can't dedupe) and give warnings on install (since the peer dependency webpack is no longer around), as well as obscure any security advisories webpack or its dependencies would receive.

@timneutkens
Copy link
Copy Markdown
Contributor

@wtgtybhertgeghgtwtg we'll be nccing most of Next.js meaning that the dependencies would be deduped at build time. ncc itself bundles webpack too and it works perfectly, install size is smaller and it's way less error prone, eg the acorn install issue etc are a thing of the past.

For now we're starting with webpack because it's the easiest way to start off this bundling work.

@wtgtybhertgeghgtwtg
Copy link
Copy Markdown
Contributor

Sorry if I wasn't clear, I meant for a project using next, not next itself. next will get smaller and its dependency tree will be deduped, but they won't be able to be deduped with the versions used by other packages. So people using jest alongside with next may see an increase in install size, since it can't share versions of glob and micromatch with next.

Depending on what you end up bundling, this might occur in next, as well (if you bundle webpackbar or launch-editor, but not the dependencies for the babel config, chalk won't be able to dedupe), but that probably still be a net decrease of package size.

@rauchg
Copy link
Copy Markdown
Member

rauchg commented Feb 19, 2019

@wtgtybhertgeghgtwtg Next.js will get security warnings from GitHub's analysis of package.json, so we are not concerned from that standpoint

There's a major security benefit from compiling into a standalone bundle (the same way that yarn does), which is that no nested "unpinned" dependencies that the Next.js team doesn't know about get installed.

So, we forego npm audit in favor of not shipping the vulnerabilities to begin with.

@wtgtybhertgeghgtwtg
Copy link
Copy Markdown
Contributor

Next.js will get security warnings from GitHub's analysis of package.json, so we are not concerned from that standpoint

That works for next, but not necessarily users of next. Even if you release a new version to include a patch for a bundled dependency, unless the unpatched version of next is marked as insecure, they have no reasonable way of knowing that they potentially have a security vulnerability.

in favor of not shipping the vulnerabilities to begin with.

It'll avoid shipping versions that have a known vulnerability, but that doesn't mean that vulnerabilities cannot be discovered for the existing version it is using.

@dav-is dav-is marked this pull request as ready for review February 19, 2019 22:33
Comment thread packages/next/build/index.ts Outdated
@github-actions
Copy link
Copy Markdown
Contributor

Stats from current PR

Click to expand stats
zeit/next.js canary zeit/next.js next-ncc Change
Build Duration 12.2s 12.2s -42ms
node_modules Size 39.6 MB 35.8 MB -3.81 MB
Total Bundle (main, webpack, commons) Size 207 kB 207 kB ⚠️ +50 B
Total Bundle (main, webpack, commons) gzip Size 68.2 kB 68.2 kB ⚠️ +28 B
Client _app Size 2.13 kB 2.13 kB
Client _app gzip Size 919 B 919 B
Client _error Size 14.2 kB 14.2 kB
Client _error gzip Size 5.39 kB 5.39 kB
Client pages/index Size 288 B 288 B
Client pages/index gzip Size 222 B 222 B
Client pages/link Size 3.62 kB 3.62 kB
Client pages/link gzip Size 1.63 kB 1.63 kB
Client pages/routerDirect Size 411 B 411 B
Client pages/routerDirect gzip Size 296 B 296 B
Client pages/withRouter Size 393 B 393 B
Client pages/withRouter gzip Size 280 B 280 B
Client main Size 27.9 kB 27.9 kB -15 B
Client main gzip Size 9.64 kB 9.64 kB ⚠️ +1 B
Client commons Size 177 kB 177 kB ⚠️ +65 B
Client commons gzip Size 57.4 kB 57.4 kB ⚠️ +27 B
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 769 B 769 B
Base Rendered Size 1.34 kB 1.34 kB
Build Dir Size 637 kB 637 kB ⚠️ +92 B
Click to expand serverless stats
zeit/next.js canary zeit/next.js next-ncc Change
Build Duration 14.8s 14.9s ⚠️ +26ms
node_modules Size 39.6 MB 35.8 MB -3.81 MB
Total Bundle (main, webpack, commons) Size 207 kB 207 kB ⚠️ +50 B
Total Bundle (main, webpack, commons) gzip Size 68.2 kB 68.2 kB ⚠️ +28 B
Client _app Size 2.13 kB 2.13 kB
Client _app gzip Size 919 B 919 B
Client _error Size 14.2 kB 14.2 kB
Client _error gzip Size 5.39 kB 5.39 kB
Client pages/index Size 288 B 288 B
Client pages/index gzip Size 222 B 222 B
Client pages/link Size 3.62 kB 3.62 kB
Client pages/link gzip Size 1.63 kB 1.63 kB
Client pages/routerDirect Size 411 B 411 B
Client pages/routerDirect gzip Size 296 B 296 B
Client pages/withRouter Size 393 B 393 B
Client pages/withRouter gzip Size 280 B 280 B
Client main Size 27.9 kB 27.9 kB -15 B
Client main gzip Size 9.64 kB 9.64 kB ⚠️ +1 B
Client commons Size 177 kB 177 kB ⚠️ +65 B
Client commons gzip Size 57.4 kB 57.4 kB ⚠️ +27 B
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 769 B 769 B
Serverless pages/link Size 327 kB 327 kB -5 B
Serverless pages/link gzip Size 87.5 kB 87.5 kB ⚠️ +2 B
Serverless pages/index Size 321 kB 321 kB -5 B
Serverless pages/index gzip Size 85.6 kB 85.6 kB ⚠️ +2 B
Serverless pages/_error Size 322 kB 322 kB -5 B
Serverless pages/_error gzip Size 85.3 kB 85.3 kB
Serverless pages/routerDirect Size 321 kB 321 kB -5 B
Serverless pages/routerDirect gzip Size 85.6 kB 85.6 kB ⚠️ +2 B
Serverless pages/withRouter Size 321 kB 321 kB -5 B
Serverless pages/withRouter gzip Size 85.7 kB 85.7 kB ⚠️ +2 B
Build Dir Size 2.19 MB 2.19 MB ⚠️ +71 B

@github-actions
Copy link
Copy Markdown
Contributor

Stats from current PR

Click to expand stats
zeit/next.js canary zeit/next.js next-ncc Change
Build Duration 11.7s 11.5s -187ms
node_modules Size 39.6 MB 36 MB -3.54 MB
Total Bundle (main, webpack, commons) Size 207 kB 207 kB ⚠️ +50 B
Total Bundle (main, webpack, commons) gzip Size 68.2 kB 68.2 kB ⚠️ +28 B
Client _app Size 2.13 kB 2.13 kB
Client _app gzip Size 919 B 919 B
Client _error Size 14.2 kB 14.2 kB
Client _error gzip Size 5.39 kB 5.39 kB
Client pages/index Size 288 B 288 B
Client pages/index gzip Size 222 B 222 B
Client pages/link Size 3.62 kB 3.62 kB
Client pages/link gzip Size 1.63 kB 1.63 kB
Client pages/routerDirect Size 411 B 411 B
Client pages/routerDirect gzip Size 296 B 296 B
Client pages/withRouter Size 393 B 393 B
Client pages/withRouter gzip Size 280 B 280 B
Client main Size 27.9 kB 27.9 kB -15 B
Client main gzip Size 9.64 kB 9.64 kB ⚠️ +1 B
Client commons Size 177 kB 177 kB ⚠️ +65 B
Client commons gzip Size 57.4 kB 57.4 kB ⚠️ +27 B
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 769 B 769 B
Base Rendered Size 1.34 kB 1.34 kB
Build Dir Size 637 kB 637 kB ⚠️ +92 B
Click to expand serverless stats
zeit/next.js canary zeit/next.js next-ncc Change
Build Duration 14s 14.5s ⚠️ +507ms
node_modules Size 39.6 MB 36 MB -3.54 MB
Total Bundle (main, webpack, commons) Size 207 kB 207 kB ⚠️ +50 B
Total Bundle (main, webpack, commons) gzip Size 68.2 kB 68.2 kB ⚠️ +28 B
Client _app Size 2.13 kB 2.13 kB
Client _app gzip Size 919 B 919 B
Client _error Size 14.2 kB 14.2 kB
Client _error gzip Size 5.39 kB 5.39 kB
Client pages/index Size 288 B 288 B
Client pages/index gzip Size 222 B 222 B
Client pages/link Size 3.62 kB 3.62 kB
Client pages/link gzip Size 1.63 kB 1.63 kB
Client pages/routerDirect Size 411 B 411 B
Client pages/routerDirect gzip Size 296 B 296 B
Client pages/withRouter Size 393 B 393 B
Client pages/withRouter gzip Size 280 B 280 B
Client main Size 27.9 kB 27.9 kB -15 B
Client main gzip Size 9.64 kB 9.64 kB ⚠️ +1 B
Client commons Size 177 kB 177 kB ⚠️ +65 B
Client commons gzip Size 57.4 kB 57.4 kB ⚠️ +27 B
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 769 B 769 B
Serverless pages/link Size 327 kB 327 kB -5 B
Serverless pages/link gzip Size 87.5 kB 87.5 kB
Serverless pages/index Size 321 kB 321 kB -5 B
Serverless pages/index gzip Size 85.6 kB 85.6 kB ⚠️ +1 B
Serverless pages/_error Size 322 kB 322 kB -5 B
Serverless pages/_error gzip Size 85.3 kB 85.3 kB ⚠️ +1 B
Serverless pages/routerDirect Size 321 kB 321 kB -5 B
Serverless pages/routerDirect gzip Size 85.6 kB 85.6 kB ⚠️ +2 B
Serverless pages/withRouter Size 321 kB 321 kB -5 B
Serverless pages/withRouter gzip Size 85.7 kB 85.7 kB ⚠️ +2 B
Build Dir Size 2.19 MB 2.19 MB ⚠️ +71 B

@github-actions
Copy link
Copy Markdown
Contributor

Stats from current PR

Click to expand stats
zeit/next.js canary zeit/next.js next-ncc Change
Build Duration 13.1s 11.9s -1.2s
node_modules Size 39.6 MB 35.8 MB -3.81 MB
Total Bundle (main, webpack, commons) Size 207 kB 207 kB ⚠️ +50 B
Total Bundle (main, webpack, commons) gzip Size 68.2 kB 68.2 kB ⚠️ +29 B
Client _app Size 2.13 kB 2.13 kB
Client _app gzip Size 919 B 919 B
Client _error Size 14.2 kB 14.2 kB
Client _error gzip Size 5.39 kB 5.39 kB
Client pages/index Size 288 B 288 B
Client pages/index gzip Size 222 B 222 B
Client pages/link Size 3.62 kB 3.62 kB
Client pages/link gzip Size 1.63 kB 1.63 kB
Client pages/routerDirect Size 411 B 411 B
Client pages/routerDirect gzip Size 296 B 296 B
Client pages/withRouter Size 393 B 393 B
Client pages/withRouter gzip Size 280 B 280 B
Client main Size 27.9 kB 27.9 kB -15 B
Client main gzip Size 9.64 kB 9.64 kB ⚠️ +2 B
Client commons Size 177 kB 177 kB ⚠️ +65 B
Client commons gzip Size 57.4 kB 57.4 kB ⚠️ +27 B
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 769 B 769 B
Base Rendered Size 1.34 kB 1.34 kB
Build Dir Size 637 kB 637 kB ⚠️ +92 B
Click to expand serverless stats
zeit/next.js canary zeit/next.js next-ncc Change
Build Duration 14.3s 14.4s ⚠️ +120ms
node_modules Size 39.6 MB 35.8 MB -3.81 MB
Total Bundle (main, webpack, commons) Size 207 kB 207 kB ⚠️ +50 B
Total Bundle (main, webpack, commons) gzip Size 68.2 kB 68.2 kB ⚠️ +28 B
Client _app Size 2.13 kB 2.13 kB
Client _app gzip Size 919 B 919 B
Client _error Size 14.2 kB 14.2 kB
Client _error gzip Size 5.39 kB 5.39 kB
Client pages/index Size 288 B 288 B
Client pages/index gzip Size 222 B 222 B
Client pages/link Size 3.62 kB 3.62 kB
Client pages/link gzip Size 1.63 kB 1.63 kB
Client pages/routerDirect Size 411 B 411 B
Client pages/routerDirect gzip Size 296 B 296 B
Client pages/withRouter Size 393 B 393 B
Client pages/withRouter gzip Size 280 B 280 B
Client main Size 27.9 kB 27.9 kB -15 B
Client main gzip Size 9.64 kB 9.64 kB ⚠️ +1 B
Client commons Size 177 kB 177 kB ⚠️ +65 B
Client commons gzip Size 57.4 kB 57.4 kB ⚠️ +27 B
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 769 B 769 B
Serverless pages/link Size 327 kB 327 kB -5 B
Serverless pages/link gzip Size 87.5 kB 87.5 kB
Serverless pages/index Size 321 kB 321 kB -5 B
Serverless pages/index gzip Size 85.6 kB 85.6 kB ⚠️ +1 B
Serverless pages/_error Size 322 kB 322 kB -5 B
Serverless pages/_error gzip Size 85.3 kB 85.3 kB ⚠️ +2 B
Serverless pages/routerDirect Size 321 kB 321 kB -5 B
Serverless pages/routerDirect gzip Size 85.6 kB 85.6 kB
Serverless pages/withRouter Size 321 kB 321 kB -5 B
Serverless pages/withRouter gzip Size 85.7 kB 85.7 kB
Build Dir Size 2.19 MB 2.19 MB ⚠️ +71 B

@github-actions
Copy link
Copy Markdown
Contributor

Stats from current PR

Click to expand stats
zeit/next.js canary zeit/next.js next-ncc Change
Build Duration 13s 12.5s -454ms
node_modules Size 39.6 MB 35.8 MB -3.81 MB
Total Bundle (main, webpack, commons) Size 207 kB 207 kB ⚠️ +50 B
Total Bundle (main, webpack, commons) gzip Size 68.2 kB 68.2 kB ⚠️ +28 B
Client _app Size 2.13 kB 2.13 kB
Client _app gzip Size 919 B 919 B
Client _error Size 14.2 kB 14.2 kB
Client _error gzip Size 5.39 kB 5.39 kB
Client pages/index Size 288 B 288 B
Client pages/index gzip Size 222 B 222 B
Client pages/link Size 3.62 kB 3.62 kB
Client pages/link gzip Size 1.63 kB 1.63 kB
Client pages/routerDirect Size 411 B 411 B
Client pages/routerDirect gzip Size 296 B 296 B
Client pages/withRouter Size 393 B 393 B
Client pages/withRouter gzip Size 280 B 280 B
Client main Size 27.9 kB 27.9 kB -15 B
Client main gzip Size 9.64 kB 9.64 kB ⚠️ +1 B
Client commons Size 177 kB 177 kB ⚠️ +65 B
Client commons gzip Size 57.4 kB 57.4 kB ⚠️ +27 B
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 769 B 769 B
Base Rendered Size 1.34 kB 1.34 kB
Build Dir Size 637 kB 637 kB ⚠️ +92 B
Click to expand serverless stats
zeit/next.js canary zeit/next.js next-ncc Change
Build Duration 14.7s 14.6s -94ms
node_modules Size 39.6 MB 35.8 MB -3.81 MB
Total Bundle (main, webpack, commons) Size 207 kB 207 kB ⚠️ +50 B
Total Bundle (main, webpack, commons) gzip Size 68.2 kB 68.2 kB ⚠️ +27 B
Client _app Size 2.13 kB 2.13 kB
Client _app gzip Size 919 B 919 B
Client _error Size 14.2 kB 14.2 kB
Client _error gzip Size 5.39 kB 5.39 kB
Client pages/index Size 288 B 288 B
Client pages/index gzip Size 222 B 222 B
Client pages/link Size 3.62 kB 3.62 kB
Client pages/link gzip Size 1.63 kB 1.63 kB
Client pages/routerDirect Size 411 B 411 B
Client pages/routerDirect gzip Size 296 B 296 B
Client pages/withRouter Size 393 B 393 B
Client pages/withRouter gzip Size 280 B 280 B
Client main Size 27.9 kB 27.9 kB -15 B
Client main gzip Size 9.64 kB 9.64 kB
Client commons Size 177 kB 177 kB ⚠️ +65 B
Client commons gzip Size 57.4 kB 57.4 kB ⚠️ +27 B
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 769 B 769 B
Serverless pages/link Size 327 kB 327 kB -5 B
Serverless pages/link gzip Size 87.5 kB 87.5 kB -1 B
Serverless pages/index Size 321 kB 321 kB -5 B
Serverless pages/index gzip Size 85.6 kB 85.6 kB ⚠️ +2 B
Serverless pages/_error Size 322 kB 322 kB -5 B
Serverless pages/_error gzip Size 85.3 kB 85.3 kB ⚠️ +1 B
Serverless pages/routerDirect Size 321 kB 321 kB -5 B
Serverless pages/routerDirect gzip Size 85.6 kB 85.6 kB ⚠️ +1 B
Serverless pages/withRouter Size 321 kB 321 kB -5 B
Serverless pages/withRouter gzip Size 85.7 kB 85.7 kB
Build Dir Size 2.19 MB 2.19 MB ⚠️ +71 B

@github-actions
Copy link
Copy Markdown
Contributor

Stats from current PR

Click to expand stats
zeit/next.js canary zeit/next.js next-ncc Change
Build Duration 11.6s 11.3s -364ms
node_modules Size 39.6 MB 35.8 MB -3.81 MB
Total Bundle (main, webpack, commons) Size 207 kB 207 kB ⚠️ +50 B
Total Bundle (main, webpack, commons) gzip Size 68.2 kB 68.2 kB ⚠️ +28 B
Client _app Size 2.13 kB 2.13 kB
Client _app gzip Size 919 B 919 B
Client _error Size 14.2 kB 14.2 kB
Client _error gzip Size 5.39 kB 5.39 kB
Client pages/index Size 288 B 288 B
Client pages/index gzip Size 222 B 222 B
Client pages/link Size 3.62 kB 3.62 kB
Client pages/link gzip Size 1.63 kB 1.63 kB
Client pages/routerDirect Size 411 B 411 B
Client pages/routerDirect gzip Size 296 B 296 B
Client pages/withRouter Size 393 B 393 B
Client pages/withRouter gzip Size 280 B 280 B
Client main Size 27.9 kB 27.9 kB -15 B
Client main gzip Size 9.64 kB 9.64 kB ⚠️ +1 B
Client commons Size 177 kB 177 kB ⚠️ +65 B
Client commons gzip Size 57.4 kB 57.4 kB ⚠️ +27 B
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 769 B 769 B
Base Rendered Size 1.34 kB 1.34 kB
Build Dir Size 637 kB 637 kB ⚠️ +92 B
Click to expand serverless stats
zeit/next.js canary zeit/next.js next-ncc Change
Build Duration 13.4s 13s -399ms
node_modules Size 39.6 MB 35.8 MB -3.81 MB
Total Bundle (main, webpack, commons) Size 207 kB 207 kB ⚠️ +50 B
Total Bundle (main, webpack, commons) gzip Size 68.2 kB 68.2 kB ⚠️ +27 B
Client _app Size 2.13 kB 2.13 kB
Client _app gzip Size 919 B 919 B
Client _error Size 14.2 kB 14.2 kB
Client _error gzip Size 5.39 kB 5.39 kB
Client pages/index Size 288 B 288 B
Client pages/index gzip Size 222 B 222 B
Client pages/link Size 3.62 kB 3.62 kB
Client pages/link gzip Size 1.63 kB 1.63 kB
Client pages/routerDirect Size 411 B 411 B
Client pages/routerDirect gzip Size 296 B 296 B
Client pages/withRouter Size 393 B 393 B
Client pages/withRouter gzip Size 280 B 280 B
Client main Size 27.9 kB 27.9 kB -15 B
Client main gzip Size 9.64 kB 9.64 kB
Client commons Size 177 kB 177 kB ⚠️ +65 B
Client commons gzip Size 57.4 kB 57.4 kB ⚠️ +27 B
Client webpack Size 1.49 kB 1.49 kB
Client webpack gzip Size 769 B 769 B
Serverless pages/link Size 327 kB 327 kB -5 B
Serverless pages/link gzip Size 87.5 kB 87.5 kB ⚠️ +1 B
Serverless pages/index Size 321 kB 321 kB -5 B
Serverless pages/index gzip Size 85.6 kB 85.6 kB ⚠️ +1 B
Serverless pages/_error Size 322 kB 322 kB -5 B
Serverless pages/_error gzip Size 85.3 kB 85.3 kB ⚠️ +1 B
Serverless pages/routerDirect Size 321 kB 321 kB -5 B
Serverless pages/routerDirect gzip Size 85.6 kB 85.6 kB
Serverless pages/withRouter Size 321 kB 321 kB -5 B
Serverless pages/withRouter gzip Size 85.7 kB 85.7 kB ⚠️ +2 B
Build Dir Size 2.19 MB 2.19 MB ⚠️ +71 B

@dav-is dav-is requested a review from timneutkens April 26, 2019 19:58
@dav-is dav-is merged commit f66546f into canary Apr 26, 2019
@dav-is dav-is deleted the next-ncc branch April 26, 2019 22:24
@guybedford guybedford mentioned this pull request May 10, 2019
@lock lock Bot locked as resolved and limited conversation to collaborators Apr 25, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants