diff --git a/tools/tree-shaking-test/README.md b/tools/tree-shaking-test/README.md new file mode 100644 index 0000000000..99b4da8e26 --- /dev/null +++ b/tools/tree-shaking-test/README.md @@ -0,0 +1,17 @@ +Rollup tree-shaking test +------------------------ + +The purpose of this test is to verify how much stuff can be tree-shaken from our packages. + +The test generates an empty js file that imports everything from a particular package but doesn't +use any of the imported references. + +In the ideal scenario Rollup should detect that none of the references are being used and should +create an empty bundle file. + +In reality there is a lot of stuff preserved in the bundle because Rollup is currently not able to +make a safe decision to remove many of the unused symbols. + +To run execute: `./tools/tree-shaking-test/test.sh` + +then inspect `dist/tree-shaking/test/**/*.bundle.js` diff --git a/tools/tree-shaking-test/rollup.config.js b/tools/tree-shaking-test/rollup.config.js new file mode 100644 index 0000000000..b027594f50 --- /dev/null +++ b/tools/tree-shaking-test/rollup.config.js @@ -0,0 +1,20 @@ +class RollupNG2 { + resolveId(id, from){ + if(id.startsWith('@angular/')){ + return `${__dirname}/../../packages-dist/${id.split('/')[1]}/esm/index.js`; + } + + // if(id.startsWith('rxjs/')){ + // return `${__dirname}/../../../node_modules/rxjs-es/${id.replace('rxjs/', '')}.js`; + // } + } +} + + +export default { + entry: 'test.js', + format: 'es6', + plugins: [ + new RollupNG2(), + ] +} diff --git a/tools/tree-shaking-test/test.sh b/tools/tree-shaking-test/test.sh new file mode 100755 index 0000000000..a0792090e0 --- /dev/null +++ b/tools/tree-shaking-test/test.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash + +set -ex -o pipefail + +cd `dirname $0` +cd ../.. + +export NODE_PATH=${NODE_PATH}:$(pwd)/dist-packages/ + +DEST_DIR=./dist/trees-shaking-test + +rm -rf ${DEST_DIR} + +for PACKAGE in \ + core \ + compiler \ + common \ + platform-browser \ + platform-server \ + http \ + router \ + upgrade +do + echo "======= Tree-shaking TEST: ${SRCDIR} =====" + TEST_DIR=${DEST_DIR}/${PACKAGE} + TEST_ENTRY_POINT=${TEST_DIR}/test.js + mkdir -p ${TEST_DIR} + cp ./tools/tree-shaking-test/rollup.config.js ${TEST_DIR}/ + echo "import * as x from '@angular/${PACKAGE}'" > ${TEST_ENTRY_POINT} + ( + cd ${TEST_DIR} + $(npm bin)/rollup --config rollup.config.js --output ${PACKAGE}.bundle.js + ) + +done