Exclude node modules from backend build (#211)

Setup following directions from [webpack-node-externals]

[webpack-node-externals]: https://www.npmjs.com/package/webpack-node-externals

This unblocks #210.

Test plan: `yarn backend` still succeeds, and the binary scripts still
work. The resultant binaries are much smaller, as seen below (note build
time is the same).

before:
```
❯ yarn backend
yarn run v1.5.1
$ node scripts/backend.js
Building backend applications...
Compiled successfully.

File sizes after gzip:

  231.37 KB  bin/printCombinedGraph.js
  199.5 KB   bin/fetchAndPrintGithubRepo.js
  46.41 KB   bin/cloneAndPrintGitGraph.js
  21.48 KB   bin/createExampleRepo.js
  17.71 KB   bin/loadAndPrintGitRepository.js

Build completed; results in 'bin'.
Done in 4.46s.
```

after:
```
❯ yarn backend
yarn run v1.5.1
$ node scripts/backend.js
Building backend applications...
Compiled successfully.

File sizes after gzip:

  27.78 KB  bin/printCombinedGraph.js
  12.73 KB  bin/cloneAndPrintGitGraph.js
  12.41 KB  bin/fetchAndPrintGithubRepo.js
  6.03 KB   bin/loadAndPrintGitRepository.js
  5.52 KB   bin/createExampleRepo.js

Build completed; results in 'bin'.
Done in 4.28s.
```
This commit is contained in:
Dandelion Mané 2018-05-04 16:31:39 -07:00 committed by GitHub
parent d3443a3d4c
commit de5542de6a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 8 additions and 2 deletions

View File

@ -2,6 +2,7 @@ const webpack = require("webpack");
const eslintFormatter = require("react-dev-utils/eslintFormatter"); const eslintFormatter = require("react-dev-utils/eslintFormatter");
const ModuleScopePlugin = require("react-dev-utils/ModuleScopePlugin"); const ModuleScopePlugin = require("react-dev-utils/ModuleScopePlugin");
const paths = require("./paths"); const paths = require("./paths");
const nodeExternals = require("webpack-node-externals");
// This is the backend configuration. It builds applications that target // This is the backend configuration. It builds applications that target
// Node and will not run in a browser. // Node and will not run in a browser.
@ -11,6 +12,7 @@ module.exports = {
// Target Node instead of the browser. // Target Node instead of the browser.
target: "node", target: "node",
entry: paths.backendEntryPoints, entry: paths.backendEntryPoints,
externals: [nodeExternals()],
output: { output: {
path: paths.backendBuild, path: paths.backendBuild,
// Generated JS file names (with nested folders). // Generated JS file names (with nested folders).
@ -65,7 +67,6 @@ module.exports = {
], ],
}, },
], ],
exprContextCritical: false,
}, },
plugins: [ plugins: [
new webpack.DefinePlugin({ new webpack.DefinePlugin({

View File

@ -119,6 +119,7 @@
"enzyme-adapter-react-16": "^1.1.1", "enzyme-adapter-react-16": "^1.1.1",
"enzyme-to-json": "^3.3.3", "enzyme-to-json": "^3.3.3",
"mkdirp": "^0.5.1", "mkdirp": "^0.5.1",
"tmp": "^0.0.33" "tmp": "^0.0.33",
"webpack-node-externals": "^1.7.2"
} }
} }

View File

@ -6941,6 +6941,10 @@ webpack-manifest-plugin@1.3.2:
fs-extra "^0.30.0" fs-extra "^0.30.0"
lodash ">=3.5 <5" lodash ">=3.5 <5"
webpack-node-externals@^1.7.2:
version "1.7.2"
resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-1.7.2.tgz#6e1ee79ac67c070402ba700ef033a9b8d52ac4e3"
webpack-sources@^1.0.1: webpack-sources@^1.0.1:
version "1.1.0" version "1.1.0"
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54"