diff --git a/README.md b/README.md index 59ce353a0348..e077fbcb2c98 100644 --- a/README.md +++ b/README.md @@ -114,7 +114,7 @@ Support us with a monthly donation and help us continue our activities. [[Become -
SΓ©bastien Chopin
SΓ©bastien Chopin

πŸ“ πŸ› πŸ’» 🎨 πŸ“– πŸ’¬ πŸ‘€ πŸ“’
Alexandre Chopin
Alexandre Chopin

🎨 πŸ“– πŸ“‹ πŸ“¦ πŸ’¬ πŸ“’
Pooya Parsa
Pooya Parsa

πŸ› πŸ’» πŸ”Œ πŸ’¬ πŸ‘€ πŸ”§
Clark Du
Clark Du

πŸ› πŸ’» πŸ’‘ πŸ‘€ ⚠️ πŸ”§
Alexander Lichter
Alexander Lichter

πŸ’¬ πŸ› πŸ’» πŸ’‘ πŸ‘€ ⚠️
Jonas Galvez
Jonas Galvez

πŸ’¬ πŸ› πŸ’» πŸ’‘ πŸ‘€ ⚠️
Dmitry Molotkov
Dmitry Molotkov

πŸ’¬ πŸ› πŸ’» πŸ€” πŸ‘€
Kevin Marrec
Kevin Marrec

πŸ’» πŸ€” πŸ“¦ πŸ‘€
Pim
Pim

πŸ› πŸ’»
+
SΓ©bastien Chopin
SΓ©bastien Chopin

πŸ“ πŸ› πŸ’» 🎨 πŸ“– πŸ’¬ πŸ‘€ πŸ“’
Alexandre Chopin
Alexandre Chopin

🎨 πŸ“– πŸ“‹ πŸ“¦ πŸ’¬ πŸ“’
Pooya Parsa
Pooya Parsa

πŸ› πŸ’» πŸ”Œ πŸ’¬ πŸ‘€ πŸ”§
Clark Du
Clark Du

πŸ› πŸ’» πŸ’‘ πŸ‘€ ⚠️ πŸ”§
Alexander Lichter
Alexander Lichter

πŸ’¬ πŸ› πŸ’» πŸ’‘ πŸ‘€ ⚠️
Jonas Galvez
Jonas Galvez

πŸ’¬ πŸ› πŸ’» πŸ’‘ πŸ‘€ ⚠️
Dmitry Molotkov
Dmitry Molotkov

πŸ’¬ πŸ› πŸ’» πŸ€” πŸ‘€
Kevin Marrec
Kevin Marrec

πŸ’» πŸ€” πŸ“¦ πŸ‘€
Pim
Pim

πŸ› πŸ’»
diff --git a/distributions/nuxt-start/package.json b/distributions/nuxt-start/package.json index 3c8e8569c3d6..b0bbb21d995d 100644 --- a/distributions/nuxt-start/package.json +++ b/distributions/nuxt-start/package.json @@ -67,7 +67,7 @@ "vuex": "^3.6.0" }, "engines": { - "node": ">=8.9.0", - "npm": ">=5.0.0" + "node": ">=10.13.0", + "npm": ">=6.14.9" } } diff --git a/distributions/nuxt/README.md b/distributions/nuxt/README.md index 59ce353a0348..e077fbcb2c98 100644 --- a/distributions/nuxt/README.md +++ b/distributions/nuxt/README.md @@ -114,7 +114,7 @@ Support us with a monthly donation and help us continue our activities. [[Become -
SΓ©bastien Chopin
SΓ©bastien Chopin

πŸ“ πŸ› πŸ’» 🎨 πŸ“– πŸ’¬ πŸ‘€ πŸ“’
Alexandre Chopin
Alexandre Chopin

🎨 πŸ“– πŸ“‹ πŸ“¦ πŸ’¬ πŸ“’
Pooya Parsa
Pooya Parsa

πŸ› πŸ’» πŸ”Œ πŸ’¬ πŸ‘€ πŸ”§
Clark Du
Clark Du

πŸ› πŸ’» πŸ’‘ πŸ‘€ ⚠️ πŸ”§
Alexander Lichter
Alexander Lichter

πŸ’¬ πŸ› πŸ’» πŸ’‘ πŸ‘€ ⚠️
Jonas Galvez
Jonas Galvez

πŸ’¬ πŸ› πŸ’» πŸ’‘ πŸ‘€ ⚠️
Dmitry Molotkov
Dmitry Molotkov

πŸ’¬ πŸ› πŸ’» πŸ€” πŸ‘€
Kevin Marrec
Kevin Marrec

πŸ’» πŸ€” πŸ“¦ πŸ‘€
Pim
Pim

πŸ› πŸ’»
+
SΓ©bastien Chopin
SΓ©bastien Chopin

πŸ“ πŸ› πŸ’» 🎨 πŸ“– πŸ’¬ πŸ‘€ πŸ“’
Alexandre Chopin
Alexandre Chopin

🎨 πŸ“– πŸ“‹ πŸ“¦ πŸ’¬ πŸ“’
Pooya Parsa
Pooya Parsa

πŸ› πŸ’» πŸ”Œ πŸ’¬ πŸ‘€ πŸ”§
Clark Du
Clark Du

πŸ› πŸ’» πŸ’‘ πŸ‘€ ⚠️ πŸ”§
Alexander Lichter
Alexander Lichter

πŸ’¬ πŸ› πŸ’» πŸ’‘ πŸ‘€ ⚠️
Jonas Galvez
Jonas Galvez

πŸ’¬ πŸ› πŸ’» πŸ’‘ πŸ‘€ ⚠️
Dmitry Molotkov
Dmitry Molotkov

πŸ’¬ πŸ› πŸ’» πŸ€” πŸ‘€
Kevin Marrec
Kevin Marrec

πŸ’» πŸ€” πŸ“¦ πŸ‘€
Pim
Pim

πŸ› πŸ’»
diff --git a/distributions/nuxt/package.json b/distributions/nuxt/package.json index 8109912295f3..7863f78ffb9c 100644 --- a/distributions/nuxt/package.json +++ b/distributions/nuxt/package.json @@ -69,8 +69,8 @@ "@nuxt/webpack": "2.14.9" }, "engines": { - "node": ">=8.9.0", - "npm": ">=5.0.0" + "node": ">=10.13.0", + "npm": ">=6.14.9" }, "collective": { "url": "https://opencollective.com/nuxtjs", diff --git a/examples/style-resources/package.json b/examples/style-resources/package.json index d33729f74861..9024d76e2ce7 100644 --- a/examples/style-resources/package.json +++ b/examples/style-resources/package.json @@ -12,7 +12,7 @@ "post-update": "yarn upgrade --latest" }, "devDependencies": { - "node-sass": "^4.7.2", - "sass-loader": "^6.0.6" + "sass": "^1.29.0", + "sass-loader": "^10.1.0" } } diff --git a/examples/with-element-ui/package.json b/examples/with-element-ui/package.json index 6dd5c6c8cce5..6107026bcbe3 100644 --- a/examples/with-element-ui/package.json +++ b/examples/with-element-ui/package.json @@ -13,7 +13,7 @@ "post-update": "yarn upgrade --latest" }, "devDependencies": { - "node-sass": "^4.6.0", - "sass-loader": "^6.0.6" + "sass": "^1.29.0", + "sass-loader": "^10.1.0" } } diff --git a/package.json b/package.json index 0ad86240db4e..7049b75d9d26 100644 --- a/package.json +++ b/package.json @@ -52,10 +52,10 @@ "eslint": "^7.14.0", "eslint-multiplexer": "^2.0.0", "esm": "^3.2.25", - "execa": "^3.4.0", + "execa": "^5.0.0", "express": "^4.17.1", "finalhandler": "^1.1.2", - "fs-extra": "^8.1.0", + "fs-extra": "^9.0.1", "get-port": "^5.1.1", "glob": "^7.1.6", "got": "^11.8.0", @@ -64,17 +64,18 @@ "jest": "^26.6.3", "jiti": "^0.1.17", "jsdom": "^16.4.0", + "jsonfile": "^6.1.0", "klaw-sync": "^6.0.0", "lerna": "^3.22.1", "lodash": "^4.17.20", "node-fetch": "^2.6.1", - "node-sass": "^4.14.1", "puppeteer-core": "^5.5.0", "request": "^2.88.2", "rimraf": "^3.0.2", - "rollup": "2.34.0", + "rollup": "2.34.1", "rollup-plugin-license": "^2.2.0", - "sass-loader": "^8.0.2", + "sass": "^1.29.0", + "sass-loader": "^10.1.0", "sort-package-json": "^1.48.0", "typescript": "~4.1", "vue-jest": "^4.0.0-rc.1" diff --git a/packages/builder/package.json b/packages/builder/package.json index 0ae84e465b0e..2b53f9ee2f71 100644 --- a/packages/builder/package.json +++ b/packages/builder/package.json @@ -12,16 +12,16 @@ "@nuxt/utils": "2.14.9", "@nuxt/vue-app": "2.14.9", "@nuxt/webpack": "2.14.9", - "chalk": "^3.0.0", + "chalk": "^4.1.0", "chokidar": "^3.4.3", "consola": "^2.15.0", - "fs-extra": "^8.1.0", + "fs-extra": "^9.0.1", "glob": "^7.1.6", "hash-sum": "^2.0.0", "ignore": "^5.1.8", "lodash": "^4.17.20", - "pify": "^4.0.1", - "semver": "^7.3.2", + "pify": "^5.0.0", + "semver": "^7.3.4", "serialize-javascript": "^5.0.1", "upath": "^2.0.1" }, diff --git a/packages/cli/package.json b/packages/cli/package.json index 2f5a52dc53c0..d08c62819a98 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -15,16 +15,16 @@ "@nuxt/config": "2.14.9", "@nuxt/utils": "2.14.9", "boxen": "^4.2.0", - "chalk": "^3.0.0", + "chalk": "^4.1.0", "compression": "^1.7.4", "connect": "^3.7.0", "consola": "^2.15.0", "crc": "^3.8.0", "destr": "^1.0.1", "esm": "^3.2.25", - "execa": "^3.4.0", + "execa": "^5.0.0", "exit": "^0.1.2", - "fs-extra": "^8.1.0", + "fs-extra": "^9.0.1", "globby": "^11.0.1", "hable": "^3.0.0", "minimist": "^1.2.5", @@ -33,7 +33,7 @@ "serve-static": "^1.14.1", "std-env": "^2.2.1", "upath": "^2.0.1", - "wrap-ansi": "^6.2.0" + "wrap-ansi": "^7.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/cli/test/unit/__snapshots__/webpack.test.js.snap b/packages/cli/test/unit/__snapshots__/webpack.test.js.snap index a138f9cc8e4e..8c912c53c4dd 100644 --- a/packages/cli/test/unit/__snapshots__/webpack.test.js.snap +++ b/packages/cli/test/unit/__snapshots__/webpack.test.js.snap @@ -98,11 +98,11 @@ exports[`webpack nuxt webpack module.rules 1`] = ` Object { \\"loader\\": \\"css-loader\\", \\"options\\": Object { + \\"esModule\\": false, \\"importLoaders\\": 2, \\"modules\\": Object { \\"localIdentName\\": \\"[local]_[hash:base64:5]\\", }, - \\"onlyLocals\\": false, \\"sourceMap\\": false, }, }, @@ -132,8 +132,8 @@ exports[`webpack nuxt webpack module.rules 1`] = ` Object { \\"loader\\": \\"css-loader\\", \\"options\\": Object { + \\"esModule\\": false, \\"importLoaders\\": 2, - \\"onlyLocals\\": false, \\"sourceMap\\": false, }, }, @@ -169,11 +169,11 @@ exports[`webpack nuxt webpack module.rules 1`] = ` Object { \\"loader\\": \\"css-loader\\", \\"options\\": Object { + \\"esModule\\": false, \\"importLoaders\\": 2, \\"modules\\": Object { \\"localIdentName\\": \\"[local]_[hash:base64:5]\\", }, - \\"onlyLocals\\": false, \\"sourceMap\\": false, }, }, @@ -203,8 +203,8 @@ exports[`webpack nuxt webpack module.rules 1`] = ` Object { \\"loader\\": \\"css-loader\\", \\"options\\": Object { + \\"esModule\\": false, \\"importLoaders\\": 2, - \\"onlyLocals\\": false, \\"sourceMap\\": false, }, }, @@ -240,11 +240,11 @@ exports[`webpack nuxt webpack module.rules 1`] = ` Object { \\"loader\\": \\"css-loader\\", \\"options\\": Object { + \\"esModule\\": false, \\"importLoaders\\": 2, \\"modules\\": Object { \\"localIdentName\\": \\"[local]_[hash:base64:5]\\", }, - \\"onlyLocals\\": false, \\"sourceMap\\": false, }, }, @@ -280,8 +280,8 @@ exports[`webpack nuxt webpack module.rules 1`] = ` Object { \\"loader\\": \\"css-loader\\", \\"options\\": Object { + \\"esModule\\": false, \\"importLoaders\\": 2, - \\"onlyLocals\\": false, \\"sourceMap\\": false, }, }, @@ -323,11 +323,11 @@ exports[`webpack nuxt webpack module.rules 1`] = ` Object { \\"loader\\": \\"css-loader\\", \\"options\\": Object { + \\"esModule\\": false, \\"importLoaders\\": 2, \\"modules\\": Object { \\"localIdentName\\": \\"[local]_[hash:base64:5]\\", }, - \\"onlyLocals\\": false, \\"sourceMap\\": false, }, }, @@ -366,8 +366,8 @@ exports[`webpack nuxt webpack module.rules 1`] = ` Object { \\"loader\\": \\"css-loader\\", \\"options\\": Object { + \\"esModule\\": false, \\"importLoaders\\": 2, - \\"onlyLocals\\": false, \\"sourceMap\\": false, }, }, @@ -412,11 +412,11 @@ exports[`webpack nuxt webpack module.rules 1`] = ` Object { \\"loader\\": \\"css-loader\\", \\"options\\": Object { + \\"esModule\\": false, \\"importLoaders\\": 2, \\"modules\\": Object { \\"localIdentName\\": \\"[local]_[hash:base64:5]\\", }, - \\"onlyLocals\\": false, \\"sourceMap\\": false, }, }, @@ -452,8 +452,8 @@ exports[`webpack nuxt webpack module.rules 1`] = ` Object { \\"loader\\": \\"css-loader\\", \\"options\\": Object { + \\"esModule\\": false, \\"importLoaders\\": 2, - \\"onlyLocals\\": false, \\"sourceMap\\": false, }, }, @@ -495,11 +495,11 @@ exports[`webpack nuxt webpack module.rules 1`] = ` Object { \\"loader\\": \\"css-loader\\", \\"options\\": Object { + \\"esModule\\": false, \\"importLoaders\\": 2, \\"modules\\": Object { \\"localIdentName\\": \\"[local]_[hash:base64:5]\\", }, - \\"onlyLocals\\": false, \\"sourceMap\\": false, }, }, @@ -535,8 +535,8 @@ exports[`webpack nuxt webpack module.rules 1`] = ` Object { \\"loader\\": \\"css-loader\\", \\"options\\": Object { + \\"esModule\\": false, \\"importLoaders\\": 2, - \\"onlyLocals\\": false, \\"sourceMap\\": false, }, }, @@ -570,6 +570,7 @@ exports[`webpack nuxt webpack module.rules 1`] = ` Object { \\"loader\\": \\"url-loader\\", \\"options\\": Object { + \\"esModule\\": false, \\"limit\\": 1000, \\"name\\": \\"img/[name].[contenthash:7].[ext]\\", }, @@ -582,6 +583,7 @@ exports[`webpack nuxt webpack module.rules 1`] = ` Object { \\"loader\\": \\"url-loader\\", \\"options\\": Object { + \\"esModule\\": false, \\"limit\\": 1000, \\"name\\": \\"fonts/[name].[contenthash:7].[ext]\\", }, @@ -594,6 +596,7 @@ exports[`webpack nuxt webpack module.rules 1`] = ` Object { \\"loader\\": \\"file-loader\\", \\"options\\": Object { + \\"esModule\\": false, \\"name\\": \\"videos/[name].[contenthash:7].[ext]\\", }, }, diff --git a/packages/config/package.json b/packages/config/package.json index 82c511712960..958f2fc22a00 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -13,7 +13,7 @@ "@nuxt/utils": "2.14.9", "consola": "^2.15.0", "create-require": "^1.1.1", - "defu": "^2.0.4", + "defu": "^3.2.2", "destr": "^1.0.1", "dotenv": "^8.2.0", "esm": "^3.2.25", diff --git a/packages/config/src/config/build.js b/packages/config/src/config/build.js index 9c4db2cffa0f..189f60dc2ed9 100644 --- a/packages/config/src/config/build.js +++ b/packages/config/src/config/build.js @@ -22,9 +22,9 @@ export default () => ({ video: ({ isDev }) => isDev ? '[path][name].[ext]' : 'videos/[name].[contenthash:7].[ext]' }, loaders: { - file: {}, - fontUrl: { limit: 1000 }, - imgUrl: { limit: 1000 }, + file: { esModule: false }, + fontUrl: { esModule: false, limit: 1000 }, + imgUrl: { esModule: false, limit: 1000 }, pugPlain: {}, vue: { transformAssetUrls: { @@ -34,8 +34,9 @@ export default () => ({ embed: 'src' } }, - css: {}, + css: { esModule: false }, cssModules: { + esModule: false, modules: { localIdentName: '[local]_[hash:base64:5]' } diff --git a/packages/config/test/__snapshots__/options.test.js.snap b/packages/config/test/__snapshots__/options.test.js.snap index 08a26d2e711c..03043329a357 100644 --- a/packages/config/test/__snapshots__/options.test.js.snap +++ b/packages/config/test/__snapshots__/options.test.js.snap @@ -63,19 +63,25 @@ Object { "indicator": false, "loaders": Object { "css": Object { + "esModule": false, "sourceMap": false, }, "cssModules": Object { + "esModule": false, "modules": Object { "localIdentName": "[local]_[hash:base64:5]", }, "sourceMap": false, }, - "file": Object {}, + "file": Object { + "esModule": false, + }, "fontUrl": Object { + "esModule": false, "limit": 1000, }, "imgUrl": Object { + "esModule": false, "limit": 1000, }, "less": Object { diff --git a/packages/config/test/config/__snapshots__/index.test.js.snap b/packages/config/test/config/__snapshots__/index.test.js.snap index b60266e2c569..1451f3772c9d 100644 --- a/packages/config/test/config/__snapshots__/index.test.js.snap +++ b/packages/config/test/config/__snapshots__/index.test.js.snap @@ -51,17 +51,24 @@ Object { "position": "bottom-right", }, "loaders": Object { - "css": Object {}, + "css": Object { + "esModule": false, + }, "cssModules": Object { + "esModule": false, "modules": Object { "localIdentName": "[local]_[hash:base64:5]", }, }, - "file": Object {}, + "file": Object { + "esModule": false, + }, "fontUrl": Object { + "esModule": false, "limit": 1000, }, "imgUrl": Object { + "esModule": false, "limit": 1000, }, "less": Object {}, @@ -428,17 +435,24 @@ Object { "position": "bottom-right", }, "loaders": Object { - "css": Object {}, + "css": Object { + "esModule": false, + }, "cssModules": Object { + "esModule": false, "modules": Object { "localIdentName": "[local]_[hash:base64:5]", }, }, - "file": Object {}, + "file": Object { + "esModule": false, + }, "fontUrl": Object { + "esModule": false, "limit": 1000, }, "imgUrl": Object { + "esModule": false, "limit": 1000, }, "less": Object {}, diff --git a/packages/core/package.json b/packages/core/package.json index 0481b947e2bf..c8ebe5448caf 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -16,7 +16,7 @@ "consola": "^2.15.0", "debug": "^4.2.0", "esm": "^3.2.25", - "fs-extra": "^8.1.0", + "fs-extra": "^9.0.1", "hable": "^3.0.0", "hash-sum": "^2.0.0", "std-env": "^2.2.1" diff --git a/packages/generator/package.json b/packages/generator/package.json index da4e91cad908..ae043bf6a52b 100644 --- a/packages/generator/package.json +++ b/packages/generator/package.json @@ -9,10 +9,10 @@ ], "dependencies": { "@nuxt/utils": "2.14.9", - "chalk": "^3.0.0", + "chalk": "^4.1.0", "consola": "^2.15.0", "devalue": "^2.0.1", - "fs-extra": "^8.1.0", + "fs-extra": "^9.0.1", "html-minifier": "^4.0.0", "node-html-parser": "^2.0.0" }, diff --git a/packages/server/package.json b/packages/server/package.json index 6fad4c950acf..aeaf47b0a8a6 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -12,18 +12,18 @@ "@nuxt/utils": "2.14.9", "@nuxt/vue-renderer": "2.14.9", "@nuxtjs/youch": "^4.2.3", - "chalk": "^3.0.0", + "chalk": "^4.1.0", "compression": "^1.7.4", "connect": "^3.7.0", "consola": "^2.15.0", "etag": "^1.8.1", "fresh": "^0.5.2", - "fs-extra": "^8.1.0", + "fs-extra": "^9.0.1", "ip": "^1.1.5", "launch-editor-middleware": "^2.2.1", "on-headers": "^1.0.2", - "pify": "^4.0.1", - "serve-placeholder": "^1.2.2", + "pify": "^5.0.0", + "serve-placeholder": "^1.2.3", "serve-static": "^1.14.1", "server-destroy": "^1.0.1" }, diff --git a/packages/types/config/build.d.ts b/packages/types/config/build.d.ts index 617b5f594dc0..497d189e510f 100644 --- a/packages/types/config/build.d.ts +++ b/packages/types/config/build.d.ts @@ -8,7 +8,7 @@ import { Options as AutoprefixerOptions } from 'autoprefixer' import { Options as FileLoaderOptions } from 'file-loader' import { Options as HtmlMinifierOptions } from 'html-minifier' import * as Less from 'less' -import { Options as SassOptions } from 'node-sass' +import { Options as SassOptions } from 'sass' import { Options as OptimizeCssAssetsWebpackPluginOptions } from 'optimize-css-assets-webpack-plugin' import { Plugin as PostcssPlugin } from 'postcss' import { Options as PugOptions } from 'pug' @@ -27,11 +27,13 @@ import { MiddlewareOptions as WebpackHotMiddlewareOptions, ClientOptions as Webp type CssLoaderUrlFunction = (url: string, resourcePath: string) => boolean type CssLoaderImportFunction = (parsedImport: string, resourcePath: string) => boolean -type CssLoaderMode = 'global' | 'local' +type CssLoaderMode = 'global' | 'local' | 'pure' interface CssLoaderModulesOptions { context?: string + exportLocalsConvention?: 'asIs' | 'camelCase' | 'camelCaseOnly' | 'dashes' | 'dashesOnly' + exportOnlyLocals?: boolean getLocalIdent?: (context: string, localIdentName: string, localName: string, options: CssLoaderModulesOptions) => string - hashPrefix?: string + localIdentHashPrefix?: string localIdentName?: string localIdentRegExp?: string | RegExp mode?: CssLoaderMode @@ -40,9 +42,7 @@ interface CssLoaderModulesOptions { interface CssLoaderOptions { import?: boolean | CssLoaderImportFunction importLoaders?: number - localsConvention?: 'asIs' | 'camelCase' | 'camelCaseOnly' | 'dashes' | 'dashesOnly' modules?: boolean | CssLoaderMode | CssLoaderModulesOptions - onlyLocals?: boolean sourceMap?: boolean url?: boolean | CssLoaderUrlFunction } diff --git a/packages/types/config/render.d.ts b/packages/types/config/render.d.ts index b16d00618e2a..ac60d62bc409 100644 --- a/packages/types/config/render.d.ts +++ b/packages/types/config/render.d.ts @@ -68,6 +68,7 @@ export interface NuxtOptionsRender { ) => string[] } injectScripts?: boolean + asyncScripts?: boolean resourceHints?: boolean ssr?: boolean ssrLog?: boolean | 'collapsed' diff --git a/packages/types/package.json b/packages/types/package.json index 32b5efbf7918..f783840de8e2 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -18,15 +18,16 @@ "@types/html-minifier": "^4.0.0", "@types/less": "^3.0.1", "@types/node": "^12.19.8", - "@types/node-sass": "^4.11.1", "@types/optimize-css-assets-webpack-plugin": "^5.0.1", "@types/pug": "^2.0.4", + "@types/sass": "^1.16.0", "@types/serve-static": "^1.13.8", - "@types/terser-webpack-plugin": "^2.2.0", + "@types/terser-webpack-plugin": "^4.2.0", "@types/webpack": "^4.41.25", "@types/webpack-bundle-analyzer": "^3.9.0", "@types/webpack-dev-middleware": "^3.7.2", - "@types/webpack-hot-middleware": "^2.25.3" + "@types/webpack-hot-middleware": "^2.25.3", + "sass-loader": "^10.1.0" }, "publishConfig": { "access": "public" diff --git a/packages/utils/package.json b/packages/utils/package.json index 583768738ceb..1232884cf29d 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -9,10 +9,10 @@ ], "dependencies": { "consola": "^2.15.0", - "fs-extra": "^8.1.0", + "fs-extra": "^9.0.1", "hash-sum": "^2.0.0", "proper-lockfile": "^4.1.1", - "semver": "^7.3.2", + "semver": "^7.3.4", "serialize-javascript": "^5.0.1", "signal-exit": "^3.0.3", "ua-parser-js": "^0.7.22" diff --git a/packages/vue-renderer/package.json b/packages/vue-renderer/package.json index b530e7ba3121..795697b09c92 100644 --- a/packages/vue-renderer/package.json +++ b/packages/vue-renderer/package.json @@ -11,7 +11,7 @@ "@nuxt/devalue": "^1.2.4", "@nuxt/utils": "2.14.9", "consola": "^2.15.0", - "fs-extra": "^8.1.0", + "fs-extra": "^9.0.1", "lru-cache": "^5.1.1", "vue": "^2.6.12", "vue-meta": "^2.4.0", diff --git a/packages/vue-renderer/src/renderers/modern.js b/packages/vue-renderer/src/renderers/modern.js index a7551f981cb8..71c06dd71575 100644 --- a/packages/vue-renderer/src/renderers/modern.js +++ b/packages/vue-renderer/src/renderers/modern.js @@ -51,7 +51,7 @@ export default class ModernRenderer extends SSRRenderer { return scripts } - const scriptPattern = /]*?src="([^"]*?)" defer><\/script>/g + const scriptPattern = /]*?src="([^"]*?)" defer( async)?><\/script>/g const modernScripts = scripts.replace(scriptPattern, (scriptTag, jsFile) => { const legacyJsFile = jsFile.replace(this.publicPath, '') diff --git a/packages/vue-renderer/src/renderers/ssr.js b/packages/vue-renderer/src/renderers/ssr.js index a8b29cd6d627..5f0063f2d285 100644 --- a/packages/vue-renderer/src/renderers/ssr.js +++ b/packages/vue-renderer/src/renderers/ssr.js @@ -42,7 +42,11 @@ export default class SSRRenderer extends BaseRenderer { } renderScripts (renderContext) { - return this.addAttrs(renderContext.renderScripts(), 'script') + let renderedScripts = this.addAttrs(renderContext.renderScripts(), 'script') + if (this.options.render.asyncScripts) { + renderedScripts = renderedScripts.replace(/defer>/g, 'defer async>') + } + return renderedScripts } renderStyles (renderContext) { @@ -190,7 +194,11 @@ export default class SSRRenderer extends BaseRenderer { const statePath = urlJoin(url, 'state.js') const stateUrl = urlJoin(staticAssetsBase, statePath) staticAssets.push({ path: statePath, src: stateScript }) - APP += `` + if (this.options.render.asyncScripts) { + APP += `` + } else { + APP += `` + } preloadScripts.push(stateUrl) } else { APP += `` diff --git a/packages/webpack/package.json b/packages/webpack/package.json index 13b1ae6a3e60..1008b2f8c615 100644 --- a/packages/webpack/package.json +++ b/packages/webpack/package.json @@ -15,44 +15,44 @@ "babel-loader": "^8.2.2", "cache-loader": "^4.1.0", "caniuse-lite": "^1.0.30001164", - "chalk": "^3.0.0", + "chalk": "^4.1.0", "consola": "^2.15.0", "create-require": "^1.1.1", - "css-loader": "^3.6.0", + "css-loader": "^4.3.0", "cssnano": "^4.1.10", "eventsource-polyfill": "^0.9.6", "extract-css-chunks-webpack-plugin": "^4.8.0", - "file-loader": "^4.3.0", + "file-loader": "^6.2.0", "glob": "^7.1.6", "hard-source-webpack-plugin": "^0.13.1", "hash-sum": "^2.0.0", "html-webpack-plugin": "^4.5.0", - "memory-fs": "^0.4.1", + "memory-fs": "^0.5.0", "optimize-css-assets-webpack-plugin": "^5.0.4", - "pify": "^4.0.1", + "pify": "^5.0.0", "postcss": "^7.0.32", "postcss-import": "^12.0.1", "postcss-import-resolver": "^2.0.0", "postcss-loader": "^3.0.0", "postcss-preset-env": "^6.7.0", "postcss-url": "^8.0.0", - "semver": "^7.3.2", + "semver": "^7.3.4", "std-env": "^2.2.1", "style-resources-loader": "^1.4.1", - "terser-webpack-plugin": "^2.3.5", - "thread-loader": "^2.1.3", + "terser-webpack-plugin": "^4.2.3", + "thread-loader": "^3.0.1", "time-fix-plugin": "^2.0.7", - "url-loader": "^2.3.0", + "url-loader": "^4.1.1", "vue-loader": "^15.9.5", "webpack": "^4.44.2", "webpack-bundle-analyzer": "^3.9.0", - "webpack-dev-middleware": "^3.7.2", + "webpack-dev-middleware": "^4.0.2", "webpack-hot-middleware": "^2.25.0", "webpack-node-externals": "^2.5.2", "webpackbar": "^4.0.0" }, "engines": { - "node": ">=8.9.0" + "node": ">=10.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/webpack/src/builder.js b/packages/webpack/src/builder.js index 2cd35e2ebf6a..c0404dfd69ad 100644 --- a/packages/webpack/src/builder.js +++ b/packages/webpack/src/builder.js @@ -168,15 +168,19 @@ export class WebpackBundler { const buildOptions = this.buildContext.options.build const { client, ...hotMiddlewareOptions } = buildOptions.hotMiddleware || {} + compiler.options.watchOptions = this.buildContext.options.watchers.webpack + compiler.hooks.infrastructureLog.tap('webpack-dev-middleware-log', (name) => { + if (name === 'webpack-dev-middleware') { + return false + } + return undefined + }) + // Create webpack dev middleware this.devMiddleware[name] = pify( webpackDevMiddleware( compiler, { - publicPath: buildOptions.publicPath, - stats: false, - logLevel: 'silent', - watchOptions: this.buildContext.options.watchers.webpack, - fs: compiler.outputFileSystem, + outputFileSystem: compiler.outputFileSystem, ...buildOptions.devMiddleware }) ) diff --git a/packages/webpack/src/config/base.js b/packages/webpack/src/config/base.js index d15047a0238e..815a07d0b789 100644 --- a/packages/webpack/src/config/base.js +++ b/packages/webpack/src/config/base.js @@ -254,7 +254,7 @@ export default class WebpackBaseConfig { }, terserOptions: { compress: { - ecma: this.isModern ? 6 : undefined + ecma: this.isModern ? 2015 : undefined }, mangle: { reserved: reservedVueTags diff --git a/packages/webpack/src/utils/style-loader.js b/packages/webpack/src/utils/style-loader.js index cac4f5b80d10..1a7ca5a220c0 100644 --- a/packages/webpack/src/utils/style-loader.js +++ b/packages/webpack/src/utils/style-loader.js @@ -20,7 +20,7 @@ export default class StyleLoader { return this.buildContext.buildOptions.extractCSS } - get onlyLocals () { + get exportOnlyLocals () { return Boolean(this.isServer && this.extractCSS) } @@ -68,10 +68,13 @@ export default class StyleLoader { } css (options) { - options.onlyLocals = this.onlyLocals const cssLoader = { loader: 'css-loader', options } - if (options.onlyLocals) { + if (this.exportOnlyLocals) { + options.modules = { + ...options.modules, + exportOnlyLocals: true + } return [cssLoader] } diff --git a/renovate.json b/renovate.json index fa3841786b2d..571f2fdc164a 100644 --- a/renovate.json +++ b/renovate.json @@ -7,25 +7,13 @@ ], "ignoreDeps": [ "core-js", - "memory-fs", - "execa", - "pify", - "file-loader", - "url-loader", - "sass-loader", - "css-loader", - "node-sass", "postcss", "postcss-import", "postcss-loader", "postcss-url", - "thread-loader", - "fs-extra", - "chalk", - "wrap-ansi", + "css-loader", "terser-webpack-plugin", - "@types/terser-webpack-plugin", - "defu" + "@types/terser-webpack-plugin" ], "lockFileMaintenance": { "enabled": true diff --git a/test/dev/basic.ssr.test.js b/test/dev/basic.ssr.test.js index 92d1f5c58e1a..fef1410991fc 100644 --- a/test/dev/basic.ssr.test.js +++ b/test/dev/basic.ssr.test.js @@ -414,6 +414,11 @@ describe('basic ssr', () => { expect(html).toContain('Auto discovered component!') }) + test('/ (normal