From 211c84e1c90c69d787addd0edcb2dba473f5c411 Mon Sep 17 00:00:00 2001 From: htbvo <51830315+htbvo@users.noreply.github.com> Date: Sat, 26 Oct 2019 12:27:22 -0500 Subject: [PATCH] allow NextScript to optionally defer javascript (#8980) * allow NextScript to optionally defer javascript * move defer options to experimental feature * combine defer flags into a single option * Update deferScripts to work with serverless target * Add test for defer and async property * Read the async property * Check versions of chrome and chromedriver * Update to chromedriver 76 * Fix test --- .circleci/config.yml | 5 ++ package.json | 2 +- packages/next/build/webpack-config.ts | 3 ++ packages/next/next-server/server/config.ts | 1 + packages/next/pages/_document.tsx | 19 ++++--- test/integration/defer-scripts/next.config.js | 9 ++++ test/integration/defer-scripts/pages/index.js | 1 + .../defer-scripts/test/index.test.js | 53 +++++++++++++++++++ .../integration/production/test/index.test.js | 18 +++++++ yarn.lock | 8 +-- 10 files changed, 108 insertions(+), 11 deletions(-) create mode 100644 test/integration/defer-scripts/next.config.js create mode 100644 test/integration/defer-scripts/pages/index.js create mode 100644 test/integration/defer-scripts/test/index.test.js diff --git a/.circleci/config.yml b/.circleci/config.yml index 4b6fe7bed5..8dac242507 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -36,6 +36,11 @@ commands: - run: name: Installing Dependencies command: yarn install --frozen-lockfile --check-files + - run: + name: Install correct Chrome Driver version + command: yarn add chromedriver@76 -W + - run: google-chrome --version + - run: chromedriver --version yarn_lint: steps: - run: diff --git a/package.json b/package.json index 41d0e23880..491ca04e32 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,7 @@ "babel-jest": "24.8.0", "browserstack-local": "1.4.0", "cheerio": "0.22.0", - "chromedriver": "75.1.0", + "chromedriver": "76.0.1", "clone": "2.1.2", "coveralls": "3.0.3", "cross-spawn": "6.0.5", diff --git a/packages/next/build/webpack-config.ts b/packages/next/build/webpack-config.ts index fd6ec5cd00..fd7f1ce58e 100644 --- a/packages/next/build/webpack-config.ts +++ b/packages/next/build/webpack-config.ts @@ -724,6 +724,9 @@ export default async function getBaseWebpackConfig( 'process.env.__NEXT_EXPORT_TRAILING_SLASH': JSON.stringify( config.exportTrailingSlash ), + 'process.env.__NEXT_DEFER_SCRIPTS': JSON.stringify( + config.experimental.deferScripts + ), 'process.env.__NEXT_MODERN_BUILD': JSON.stringify( config.experimental.modern && !dev ), diff --git a/packages/next/next-server/server/config.ts b/packages/next/next-server/server/config.ts index 712eca7017..3fe9b13f1a 100644 --- a/packages/next/next-server/server/config.ts +++ b/packages/next/next-server/server/config.ts @@ -47,6 +47,7 @@ const defaultConfig: { [key: string]: any } = { profiling: false, publicDirectory: false, sprFlushToDisk: true, + deferScripts: false, }, future: { excludeDefaultMomentLocales: false, diff --git a/packages/next/pages/_document.tsx b/packages/next/pages/_document.tsx index 5eed3f678c..3de7a9700c 100644 --- a/packages/next/pages/_document.tsx +++ b/packages/next/pages/_document.tsx @@ -521,7 +521,8 @@ export class NextScript extends Component { return (