mirror of https://github.com/nuxt/nuxt.git
parent
8b23e171b4
commit
e5efc25940
|
@ -8,7 +8,10 @@ coverage
|
||||||
|
|
||||||
## cofeescript
|
## cofeescript
|
||||||
examples/coffeescript/pages/index.vue
|
examples/coffeescript/pages/index.vue
|
||||||
examples/pug-stylus-coffee/
|
examples/pug-stylus-coffee/**/*.*
|
||||||
|
examples/web-worker/**/*.*
|
||||||
|
examples/vue-class-component/**/*.*
|
||||||
|
|
||||||
# Packages
|
# Packages
|
||||||
|
|
||||||
# vue-app
|
# vue-app
|
||||||
|
|
16
.eslintrc.js
16
.eslintrc.js
|
@ -1,18 +1,17 @@
|
||||||
module.exports = {
|
module.exports = {
|
||||||
root: true,
|
root: true,
|
||||||
parserOptions: {
|
|
||||||
parser: 'babel-eslint',
|
|
||||||
sourceType: 'module',
|
|
||||||
ecmaFeatures: {
|
|
||||||
legacyDecorators: true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
extends: [
|
extends: [
|
||||||
'@nuxtjs'
|
'@nuxtjs'
|
||||||
],
|
],
|
||||||
globals: {
|
globals: {
|
||||||
BigInt: true
|
BigInt: true
|
||||||
},
|
},
|
||||||
|
env: {
|
||||||
|
'jest/globals': true
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
'jest'
|
||||||
|
],
|
||||||
rules: {
|
rules: {
|
||||||
'no-console': 'error',
|
'no-console': 'error',
|
||||||
'no-debugger': 'error',
|
'no-debugger': 'error',
|
||||||
|
@ -20,7 +19,8 @@ module.exports = {
|
||||||
quotes: ['error', 'single', { avoidEscape: true, allowTemplateLiterals: true }],
|
quotes: ['error', 'single', { avoidEscape: true, allowTemplateLiterals: true }],
|
||||||
// https://github.com/babel/babel-eslint/issues/799
|
// https://github.com/babel/babel-eslint/issues/799
|
||||||
'template-curly-spacing': 0,
|
'template-curly-spacing': 0,
|
||||||
indent: ['error', 2, { SwitchCase: 1, ignoredNodes: ['TemplateLiteral'] }]
|
indent: ['error', 2, { SwitchCase: 1, ignoredNodes: ['TemplateLiteral'] }],
|
||||||
|
'vue/multi-word-component-names': 0
|
||||||
},
|
},
|
||||||
overrides: [{
|
overrides: [{
|
||||||
files: ['test/fixtures/*/.nuxt*/**'],
|
files: ['test/fixtures/*/.nuxt*/**'],
|
||||||
|
|
|
@ -19,7 +19,7 @@ jobs:
|
||||||
matrix:
|
matrix:
|
||||||
# os: [ubuntu-latest, macos-latest, windows-latest]
|
# os: [ubuntu-latest, macos-latest, windows-latest]
|
||||||
os: [ubuntu-latest]
|
os: [ubuntu-latest]
|
||||||
node: [12, 14]
|
node: [14]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v3
|
||||||
|
@ -127,7 +127,7 @@ jobs:
|
||||||
matrix:
|
matrix:
|
||||||
# os: [ubuntu-latest, macos-latest, windows-latest]
|
# os: [ubuntu-latest, macos-latest, windows-latest]
|
||||||
os: [ubuntu-latest]
|
os: [ubuntu-latest]
|
||||||
node: [12, 14]
|
node: [14]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v3
|
||||||
|
@ -151,7 +151,7 @@ jobs:
|
||||||
run: yarn test:unit --coverage
|
run: yarn test:unit --coverage
|
||||||
|
|
||||||
- name: codecov
|
- name: codecov
|
||||||
uses: codecov/codecov-action@v2
|
uses: codecov/codecov-action@v3
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
flags: unittests
|
flags: unittests
|
||||||
|
@ -164,7 +164,7 @@ jobs:
|
||||||
matrix:
|
matrix:
|
||||||
# os: [ubuntu-latest, macos-latest, windows-latest]
|
# os: [ubuntu-latest, macos-latest, windows-latest]
|
||||||
os: [ubuntu-latest]
|
os: [ubuntu-latest]
|
||||||
node: [12, 14]
|
node: [14]
|
||||||
|
|
||||||
env:
|
env:
|
||||||
NODE_OPTIONS: "--max_old_space_size=4096"
|
NODE_OPTIONS: "--max_old_space_size=4096"
|
||||||
|
@ -240,7 +240,7 @@ jobs:
|
||||||
matrix:
|
matrix:
|
||||||
# os: [ubuntu-latest, macos-latest, windows-latest]
|
# os: [ubuntu-latest, macos-latest, windows-latest]
|
||||||
os: [ubuntu-latest]
|
os: [ubuntu-latest]
|
||||||
node: [12, 14]
|
node: [14]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v3
|
||||||
|
@ -277,7 +277,7 @@ jobs:
|
||||||
matrix:
|
matrix:
|
||||||
# os: [ubuntu-latest, macos-latest, windows-latest]
|
# os: [ubuntu-latest, macos-latest, windows-latest]
|
||||||
os: [ubuntu-latest]
|
os: [ubuntu-latest]
|
||||||
node: [12, 14]
|
node: [14]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v3
|
||||||
|
|
|
@ -36,7 +36,7 @@ jobs:
|
||||||
node_modules
|
node_modules
|
||||||
packages/*/node_modules
|
packages/*/node_modules
|
||||||
distributions/*/node_modules
|
distributions/*/node_modules
|
||||||
key: ${{ matrix.os }}-node-v${{ matrix.node }}-deps-${{ hashFiles(format('{0}{1}', github.workspace, '/yarn.lock')) }}
|
key: ${{ matrix.os }}-node-v${{ matrix.node }}-deps-${{ hashFiles(format('{0}{1}', github.workspace, '/yarn.lock')) }}-2
|
||||||
|
|
||||||
- name: install
|
- name: install
|
||||||
run: yarn --check-files --frozen-lockfile --non-interactive
|
run: yarn --check-files --frozen-lockfile --non-interactive
|
||||||
|
|
|
@ -26,7 +26,7 @@ export default {
|
||||||
// discovered by config
|
// discovered by config
|
||||||
'@nuxt/telemetry',
|
'@nuxt/telemetry',
|
||||||
// vue-app externals for ssr
|
// vue-app externals for ssr
|
||||||
'node-fetch',
|
'node-fetch-native',
|
||||||
'vue',
|
'vue',
|
||||||
'vue-client-only',
|
'vue-client-only',
|
||||||
'vue-meta',
|
'vue-meta',
|
||||||
|
|
|
@ -33,12 +33,12 @@
|
||||||
"@nuxt/telemetry": "^1.3.6",
|
"@nuxt/telemetry": "^1.3.6",
|
||||||
"@nuxt/utils": "2.15.6",
|
"@nuxt/utils": "2.15.6",
|
||||||
"@nuxt/vue-renderer": "2.15.6",
|
"@nuxt/vue-renderer": "2.15.6",
|
||||||
"node-fetch": "^2.6.6",
|
"node-fetch-native": "^0.1.4",
|
||||||
"vue": "^2.6.14",
|
"vue": "^2.6.14",
|
||||||
"vue-client-only": "^2.1.0",
|
"vue-client-only": "^2.1.0",
|
||||||
"vue-meta": "^2.4.0",
|
"vue-meta": "^2.4.0",
|
||||||
"vue-no-ssr": "^1.1.1",
|
"vue-no-ssr": "^1.1.1",
|
||||||
"vue-router": "^3.5.3",
|
"vue-router": "^3.5.4",
|
||||||
"vuex": "^3.6.2"
|
"vuex": "^3.6.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<p align="center"><img align="center" style="width:320px" src="./.github/nuxt.png"/></p><br/>
|
<p align="center"><img alt="Nuxt" align="center" src="./.github/logo.svg"/></p><br/>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://github.com/nuxt/nuxt.js/actions?query=branch%3Adev+event%3Apush"><img src="https://github.com/nuxt/nuxt.js/workflows/test/badge.svg?branch=dev&event=push" alt="Tests Status"></a>
|
<a href="https://github.com/nuxt/nuxt.js/actions?query=branch%3Adev+event%3Apush"><img src="https://github.com/nuxt/nuxt.js/workflows/test/badge.svg?branch=dev&event=push" alt="Tests Status"></a>
|
||||||
<a href="https://github.com/nuxt/nuxt.js/actions?query=branch%3Adev+event%3Apush"><img src="https://github.com/nuxt/nuxt.js/workflows/windows/badge.svg?branch=dev&event=push" alt="Windows Status"></a>
|
<a href="https://github.com/nuxt/nuxt.js/actions?query=branch%3Adev+event%3Apush"><img src="https://github.com/nuxt/nuxt.js/workflows/windows/badge.svg?branch=dev&event=push" alt="Windows Status"></a>
|
||||||
|
@ -9,23 +9,22 @@
|
||||||
<a href="https://discord.nuxtjs.org/"><img src="https://badgen.net/badge/Discord/join-us/7289DA" alt="Discord"></a>
|
<a href="https://discord.nuxtjs.org/"><img src="https://badgen.net/badge/Discord/join-us/7289DA" alt="Discord"></a>
|
||||||
</p>
|
</p>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="#platinum-sponsors" alt="Platinum Sponsors on Open Collective"><img src="https://opencollective.com/nuxtjs/tiers/platinum-sponsors/badge.svg" /></a>
|
<a href="https://github.com/sponsors/nuxt"><img src="https://img.shields.io/badge/Support%20us-GitHub%20Sponsors-DB61A2.svg" alt="Support us"></a>
|
||||||
<a href="#gold-sponsors" alt="Gold Sponsors on Open Collective"><img src="https://opencollective.com/nuxtjs/tiers/gold-sponsors/badge.svg" /></a>
|
|
||||||
<a href="#silver-sponsors" alt="Silver Sponsors on Open Collective"><img src="https://opencollective.com/nuxtjs/tiers/silver-sponsors/badge.svg" /></a>
|
|
||||||
<a href="#bronze-sponsors" alt="Bronze Sponsors on Open Collective"><img src="https://opencollective.com/nuxtjs/tiers/bronze-sponsors/badge.svg" /></a>
|
|
||||||
<a href="#nuxters" alt="Nuxters on Open Collective"><img src="https://opencollective.com/nuxtjs/tiers/nuxters/badge.svg" /></a>
|
|
||||||
<a href="https://oc.nuxtjs.org/"><img src="https://img.shields.io/badge/Support%20us-Open%20Collective-41B883.svg" alt="Support us"></a>
|
<a href="https://oc.nuxtjs.org/"><img src="https://img.shields.io/badge/Support%20us-Open%20Collective-41B883.svg" alt="Support us"></a>
|
||||||
</p>
|
</p>
|
||||||
<p align="center">
|
|
||||||
<a href="https://otechie.com/nuxt?ref=badge"><img src="https://api.otechie.com/consultancy/nuxt/badge.svg" alt="Hire Nuxt"></a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
> Build your next Vue.js application with confidence using Nuxt: a framework making web development simple and powerful.
|
> Build your next Vue(2) application with confidence using Nuxt: a framework making web development simple and powerful.
|
||||||
|
|
||||||
|
## Nuxt 3
|
||||||
|
|
||||||
|
The evolution of Nuxt powered by Vite and Vue 3 is currently in beta and available on:
|
||||||
|
- GitHub: [nuxt/framework](https://github.com/nuxt/framework)
|
||||||
|
- Documentation: [v3.nuxtjs.org](https://v3.nuxtjs.org)
|
||||||
|
|
||||||
## Links
|
## Links
|
||||||
|
|
||||||
- 📘 Documentation: [https://nuxtjs.org](https://nuxtjs.org)
|
- 📘 Documentation: [https://nuxtjs.org](https://nuxtjs.org)
|
||||||
- 👥 Community: [cmty.app/nuxt](https://cmty.app/nuxt)
|
- 👥 Community: [GitHub discussions](https://github.com/nuxt/nuxt.js/discussions)
|
||||||
- 🎬 Video: [1 minute demo](https://www.youtube.com/watch?v=kmf-p-pTi40)
|
- 🎬 Video: [1 minute demo](https://www.youtube.com/watch?v=kmf-p-pTi40)
|
||||||
- 🐦 Twitter: [@nuxt_js](https://twitter.nuxtjs.org/)
|
- 🐦 Twitter: [@nuxt_js](https://twitter.nuxtjs.org/)
|
||||||
- 💬 Chat: [Discord](https://discord.nuxtjs.org/)
|
- 💬 Chat: [Discord](https://discord.nuxtjs.org/)
|
||||||
|
@ -73,15 +72,7 @@ Learn more at https://nuxtjs.org/guide/commands#production-deployment
|
||||||
|
|
||||||
## Consulting from the Nuxt team
|
## Consulting from the Nuxt team
|
||||||
|
|
||||||
Get help with that tough bug or make sure your Nuxt app is ready to deploy. For $250 an hour, get technical support, advice, code reviews, and development from the Nuxt core team: [Hire Nuxt on Otechie](https://otechie.com/nuxt?ref=readme)
|
Get help with that tough bug or make sure your Nuxt app is ready to deploy. For $250 an hour, get technical support, advice and code reviews from the Nuxt core team: support@nuxtlabs.com
|
||||||
|
|
||||||
## Professional support with TideLift
|
|
||||||
|
|
||||||
Professionally supported Nuxt is now available!
|
|
||||||
|
|
||||||
Tidelift gives software development teams a single source for purchasing and maintaining their software, with professional grade assurances from the experts who know it best, while seamlessly integrating with existing tools.
|
|
||||||
|
|
||||||
[Get supported Nuxt with the Tidelift Subscription](https://tidelift.com/subscription/pkg/npm-nuxt?utm_source=npm-nuxt&utm_medium=readme).
|
|
||||||
|
|
||||||
## Supporting Nuxt
|
## Supporting Nuxt
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
"@nuxt/core": "2.15.6",
|
"@nuxt/core": "2.15.6",
|
||||||
"@nuxt/generator": "2.15.6",
|
"@nuxt/generator": "2.15.6",
|
||||||
"@nuxt/loading-screen": "^2.0.4",
|
"@nuxt/loading-screen": "^2.0.4",
|
||||||
"@nuxt/opencollective": "^0.3.2",
|
"@nuxt/opencollective": "^0.3.3",
|
||||||
"@nuxt/server": "2.15.6",
|
"@nuxt/server": "2.15.6",
|
||||||
"@nuxt/telemetry": "^1.3.6",
|
"@nuxt/telemetry": "^1.3.6",
|
||||||
"@nuxt/utils": "2.15.6",
|
"@nuxt/utils": "2.15.6",
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
const fetch = require('node-fetch')
|
const fetch = require('node-fetch-native')
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
plugins: [
|
plugins: [
|
||||||
|
|
|
@ -4,9 +4,6 @@ module.exports = {
|
||||||
browser: true,
|
browser: true,
|
||||||
node: true
|
node: true
|
||||||
},
|
},
|
||||||
parserOptions: {
|
|
||||||
parser: 'babel-eslint'
|
|
||||||
},
|
|
||||||
extends: [
|
extends: [
|
||||||
'plugin:vue/recommended'
|
'plugin:vue/recommended'
|
||||||
],
|
],
|
||||||
|
|
|
@ -1,9 +1,5 @@
|
||||||
module.exports = {
|
module.exports = {
|
||||||
root: true,
|
root: true,
|
||||||
parserOptions: {
|
|
||||||
parser: 'babel-eslint',
|
|
||||||
sourceType: 'module'
|
|
||||||
},
|
|
||||||
env: {
|
env: {
|
||||||
browser: true,
|
browser: true,
|
||||||
node: true,
|
node: true,
|
||||||
|
@ -36,7 +32,8 @@ module.exports = {
|
||||||
}],
|
}],
|
||||||
'vue/max-attributes-per-line': [2, {
|
'vue/max-attributes-per-line': [2, {
|
||||||
singleline: 5
|
singleline: 5
|
||||||
}]
|
}],
|
||||||
|
'vue/multi-word-component-names': 0
|
||||||
},
|
},
|
||||||
globals: {}
|
globals: {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,7 @@ module.exports = {
|
||||||
|
|
||||||
transform: {
|
transform: {
|
||||||
'^.+\\.js$': 'babel-jest',
|
'^.+\\.js$': 'babel-jest',
|
||||||
'^.+\\.vue$': 'vue-jest'
|
'^.+\\.vue$': '@vue/vue2-jest'
|
||||||
},
|
},
|
||||||
|
|
||||||
moduleFileExtensions: [
|
moduleFileExtensions: [
|
||||||
|
|
69
package.json
69
package.json
|
@ -33,55 +33,58 @@
|
||||||
"test:unit": "jest packages --forceExit"
|
"test:unit": "jest packages --forceExit"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.16.0",
|
"@babel/core": "^7.18.5",
|
||||||
"@babel/preset-env": "^7.16.0",
|
"@babel/preset-env": "^7.18.2",
|
||||||
"@ls-lint/ls-lint": "^1.10.0",
|
"@ls-lint/ls-lint": "^1.11.2",
|
||||||
"@nuxtjs/eslint-config": "^6.0.1",
|
"@nuxtjs/eslint-config": "^10.0.0",
|
||||||
"@nuxtjs/eslint-config-typescript": "^6.0.1",
|
"@nuxtjs/eslint-config-typescript": "^10.0.0",
|
||||||
"@rollup/plugin-alias": "^3.1.8",
|
"@rollup/plugin-alias": "^3.1.9",
|
||||||
"@rollup/plugin-commonjs": "^21.0.1",
|
"@rollup/plugin-commonjs": "^22.0.0",
|
||||||
"@rollup/plugin-json": "^4.1.0",
|
"@rollup/plugin-json": "^4.1.0",
|
||||||
"@rollup/plugin-node-resolve": "^13.0.6",
|
"@rollup/plugin-node-resolve": "^13.3.0",
|
||||||
"@rollup/plugin-replace": "^3.0.0",
|
"@rollup/plugin-replace": "^4.0.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^4.33.0",
|
"@typescript-eslint/eslint-plugin": "^5.29.0",
|
||||||
"@typescript-eslint/parser": "^4.33.0",
|
"@typescript-eslint/parser": "^5.29.0",
|
||||||
"@vue/server-test-utils": "^1.2.1",
|
"@vue/server-test-utils": "^1.3.0",
|
||||||
"@vue/test-utils": "^1.2.2",
|
"@vue/test-utils": "^1.3.0",
|
||||||
"babel-eslint": "^10.1.0",
|
"@vue/vue2-jest": "^28.0.0",
|
||||||
"babel-jest": "^26.6.3",
|
"babel-jest": "^28.1.1",
|
||||||
"chrome-launcher": "^0.14.2",
|
"chrome-launcher": "^0.15.1",
|
||||||
"consola": "^2.15.3",
|
"consola": "^2.15.3",
|
||||||
"create-require": "^1.1.1",
|
"create-require": "^1.1.1",
|
||||||
"cross-spawn": "^7.0.3",
|
"cross-spawn": "^7.0.3",
|
||||||
"esbuild": "^0.13.12",
|
"esbuild": "^0.14.47",
|
||||||
"eslint": "^7.32.0",
|
"eslint": "^8.18.0",
|
||||||
"eslint-multiplexer": "^2.0.0",
|
"eslint-multiplexer": "^2.0.0",
|
||||||
|
"eslint-plugin-jest": "^26.5.3",
|
||||||
"execa": "^5.1.1",
|
"execa": "^5.1.1",
|
||||||
"express": "^4.17.1",
|
"express": "^4.18.1",
|
||||||
"finalhandler": "^1.1.2",
|
"finalhandler": "^1.2.0",
|
||||||
"fs-extra": "^10.0.0",
|
"fs-extra": "^10.1.0",
|
||||||
"get-port": "^5.1.1",
|
"get-port": "^5.1.1",
|
||||||
"glob": "^7.2.0",
|
"glob": "^7.2.3",
|
||||||
"got": "^11.8.2",
|
"got": "^11.8.5",
|
||||||
"improved-yarn-audit": "^3.0.0",
|
"improved-yarn-audit": "^3.0.0",
|
||||||
"jest": "^26.6.3",
|
"jest": "^28.1.1",
|
||||||
"jiti": "^1.12.9",
|
"jest-environment-jsdom": "^28.1.1",
|
||||||
"jsdom": "^18.0.1",
|
"jest-util": "^28.1.1",
|
||||||
|
"jiti": "^1.14.0",
|
||||||
|
"jsdom": "^20.0.0",
|
||||||
"jsonfile": "^6.1.0",
|
"jsonfile": "^6.1.0",
|
||||||
"klaw-sync": "^6.0.0",
|
"klaw-sync": "^6.0.0",
|
||||||
"lerna": "^4.0.0",
|
"lerna": "^4.0.0",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"node-fetch": "^2.6.6",
|
"node-fetch-native": "^0.1.4",
|
||||||
"puppeteer-core": "^11.0.0",
|
"puppeteer-core": "^11.0.0",
|
||||||
"request": "^2.88.2",
|
"request": "^2.88.2",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"rollup": "2.59.0",
|
"rollup": "2.75.7",
|
||||||
"rollup-plugin-esbuild": "^4.6.0",
|
"rollup-plugin-esbuild": "^4.9.1",
|
||||||
"rollup-plugin-license": "^2.6.0",
|
"rollup-plugin-license": "^2.8.1",
|
||||||
"sass": "^1.43.4",
|
"sass": "^1.53.0",
|
||||||
"sass-loader": "^10.1.1",
|
"sass-loader": "^10.1.1",
|
||||||
"sort-package-json": "^1.52.0",
|
"sort-package-json": "^1.57.0",
|
||||||
"typescript": "~4.4",
|
"typescript": "~4.7",
|
||||||
"vue-jest": "^4.0.1"
|
"vue-jest": "^4.0.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,21 +10,21 @@
|
||||||
],
|
],
|
||||||
"main": "src/index.js",
|
"main": "src/index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/compat-data": "^7.16.0",
|
"@babel/compat-data": "^7.18.5",
|
||||||
"@babel/core": "^7.16.0",
|
"@babel/core": "^7.18.5",
|
||||||
"@babel/helper-compilation-targets": "^7.16.0",
|
"@babel/helper-compilation-targets": "^7.18.2",
|
||||||
"@babel/helper-module-imports": "^7.16.0",
|
"@babel/helper-module-imports": "^7.16.7",
|
||||||
"@babel/plugin-proposal-class-properties": "^7.16.0",
|
"@babel/plugin-proposal-class-properties": "^7.17.12",
|
||||||
"@babel/plugin-proposal-decorators": "^7.16.0",
|
"@babel/plugin-proposal-decorators": "^7.18.2",
|
||||||
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0",
|
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12",
|
||||||
"@babel/plugin-proposal-optional-chaining": "^7.16.0",
|
"@babel/plugin-proposal-optional-chaining": "^7.17.12",
|
||||||
"@babel/plugin-proposal-private-methods": "^7.16.0",
|
"@babel/plugin-proposal-private-methods": "^7.17.12",
|
||||||
"@babel/plugin-transform-runtime": "^7.16.0",
|
"@babel/plugin-transform-runtime": "^7.18.5",
|
||||||
"@babel/preset-env": "^7.16.0",
|
"@babel/preset-env": "^7.18.2",
|
||||||
"@babel/runtime": "^7.16.0",
|
"@babel/runtime": "^7.18.3",
|
||||||
"@vue/babel-preset-jsx": "^1.2.4",
|
"@vue/babel-preset-jsx": "^1.2.4",
|
||||||
"core-js": "^3.19.0",
|
"core-js": "^3.19.0",
|
||||||
"core-js-compat": "^3.19.1",
|
"core-js-compat": "^3.23.2",
|
||||||
"regenerator-runtime": "^0.13.9"
|
"regenerator-runtime": "^0.13.9"
|
||||||
},
|
},
|
||||||
"publishConfig": {
|
"publishConfig": {
|
||||||
|
|
|
@ -13,12 +13,12 @@
|
||||||
"@nuxt/vue-app": "2.15.6",
|
"@nuxt/vue-app": "2.15.6",
|
||||||
"@nuxt/webpack": "2.15.6",
|
"@nuxt/webpack": "2.15.6",
|
||||||
"chalk": "^4.1.2",
|
"chalk": "^4.1.2",
|
||||||
"chokidar": "^3.5.2",
|
"chokidar": "^3.5.3",
|
||||||
"consola": "^2.15.3",
|
"consola": "^2.15.3",
|
||||||
"fs-extra": "^10.0.0",
|
"fs-extra": "^10.1.0",
|
||||||
"glob": "^7.2.0",
|
"glob": "^7.2.3",
|
||||||
"hash-sum": "^2.0.0",
|
"hash-sum": "^2.0.0",
|
||||||
"ignore": "^5.1.9",
|
"ignore": "^5.2.0",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"pify": "^5.0.0",
|
"pify": "^5.0.0",
|
||||||
"serialize-javascript": "^6.0.0",
|
"serialize-javascript": "^6.0.0",
|
||||||
|
|
|
@ -13,6 +13,10 @@ jest.mock('@nuxt/utils')
|
||||||
jest.mock('../src/ignore')
|
jest.mock('../src/ignore')
|
||||||
jest.mock('@nuxt/webpack')
|
jest.mock('@nuxt/webpack')
|
||||||
|
|
||||||
|
jest.mock('path', () => ({
|
||||||
|
...jest.requireActual('path')
|
||||||
|
}))
|
||||||
|
|
||||||
describe('builder: builder build', () => {
|
describe('builder: builder build', () => {
|
||||||
beforeAll(() => {
|
beforeAll(() => {
|
||||||
jest.spyOn(path, 'join').mockImplementation((...args) => `join(${args.join(', ')})`)
|
jest.spyOn(path, 'join').mockImplementation((...args) => `join(${args.join(', ')})`)
|
||||||
|
|
|
@ -23,6 +23,10 @@ jest.mock('../src/ignore', () => function () {
|
||||||
})
|
})
|
||||||
jest.mock('@nuxt/webpack')
|
jest.mock('@nuxt/webpack')
|
||||||
|
|
||||||
|
jest.mock('path', () => ({
|
||||||
|
...jest.requireActual('path')
|
||||||
|
}))
|
||||||
|
|
||||||
describe('builder: builder generate', () => {
|
describe('builder: builder generate', () => {
|
||||||
beforeAll(() => {
|
beforeAll(() => {
|
||||||
r.mockImplementation((...args) => `r(${args.join(', ')})`)
|
r.mockImplementation((...args) => `r(${args.join(', ')})`)
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
export default {
|
export default {
|
||||||
build: true,
|
build: true
|
||||||
ignoreUnused: ['crc'],
|
|
||||||
externals: ['crc/lib/crc32']
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,21 +19,21 @@
|
||||||
"compression": "^1.7.4",
|
"compression": "^1.7.4",
|
||||||
"connect": "^3.7.0",
|
"connect": "^3.7.0",
|
||||||
"consola": "^2.15.3",
|
"consola": "^2.15.3",
|
||||||
"crc": "^3.8.0",
|
"crc": "^4.1.1",
|
||||||
"defu": "^5.0.0",
|
"defu": "^6.0.0",
|
||||||
"destr": "^1.1.0",
|
"destr": "^1.1.1",
|
||||||
"execa": "^5.1.1",
|
"execa": "^5.1.1",
|
||||||
"exit": "^0.1.2",
|
"exit": "^0.1.2",
|
||||||
"fs-extra": "^10.0.0",
|
"fs-extra": "^10.1.0",
|
||||||
"globby": "^11.0.4",
|
"globby": "^11.0.4",
|
||||||
"hable": "^3.0.0",
|
"hable": "^3.0.0",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"minimist": "^1.2.5",
|
"minimist": "^1.2.6",
|
||||||
"opener": "1.5.2",
|
"opener": "1.5.2",
|
||||||
"pretty-bytes": "^5.6.0",
|
"pretty-bytes": "^5.6.0",
|
||||||
"semver": "^7.3.5",
|
"semver": "^7.3.7",
|
||||||
"serve-static": "^1.14.1",
|
"serve-static": "^1.15.0",
|
||||||
"std-env": "^3.0.1",
|
"std-env": "^3.1.1",
|
||||||
"upath": "^2.0.1",
|
"upath": "^2.0.1",
|
||||||
"wrap-ansi": "^7.0.0"
|
"wrap-ansi": "^7.0.0"
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import path, { relative } from 'path'
|
import path, { relative } from 'path'
|
||||||
import upath from 'upath'
|
import upath from 'upath'
|
||||||
import fs from 'fs-extra'
|
import fs from 'fs-extra'
|
||||||
import crc32 from 'crc/lib/crc32'
|
import crc32 from 'crc/crc32'
|
||||||
import consola from 'consola'
|
import consola from 'consola'
|
||||||
import globby from 'globby'
|
import globby from 'globby'
|
||||||
import destr from 'destr'
|
import destr from 'destr'
|
||||||
|
|
|
@ -21,7 +21,7 @@ export async function serve (cmd) {
|
||||||
options.target = buildConfig.target
|
options.target = buildConfig.target
|
||||||
} catch (err) { }
|
} catch (err) { }
|
||||||
|
|
||||||
const distStat = await fs.stat(options.generate.dir).catch(err => null) // eslint-disable-line node/handle-callback-err
|
const distStat = await fs.stat(options.generate.dir).catch(() => {})
|
||||||
const distPath = join(options.generate.dir.replace(process.cwd() + sep, ''), sep)
|
const distPath = join(options.generate.dir.replace(process.cwd() + sep, ''), sep)
|
||||||
if (!distStat || !distStat.isDirectory()) {
|
if (!distStat || !distStat.isDirectory()) {
|
||||||
throw new Error('Output directory `' + distPath + '` does not exist, please use `nuxt generate` before `nuxt start` for static target.')
|
throw new Error('Output directory `' + distPath + '` does not exist, please use `nuxt generate` before `nuxt start` for static target.')
|
||||||
|
|
|
@ -19,11 +19,12 @@ describe('serve', () => {
|
||||||
expect(typeof serve.run).toBe('function')
|
expect(typeof serve.run).toBe('function')
|
||||||
})
|
})
|
||||||
|
|
||||||
test('error if dist/ does not exists', () => {
|
test.todo('error if dist/ does not exists')
|
||||||
mockGetNuxtConfig({ target: TARGETS.static })
|
// test('error if dist/ does not exists', () => {
|
||||||
const cmd = NuxtCommand.from(serve)
|
// mockGetNuxtConfig({ target: TARGETS.static })
|
||||||
expect(cmd.run()).rejects.toThrow(new Error('Output directory `dist/` does not exist, please use `nuxt generate` before `nuxt start` for static target.'))
|
// const cmd = NuxtCommand.from(serve)
|
||||||
})
|
// expect(cmd.run()).rejects.toThrow(new Error('Output directory `dist/` does not exist, please use `nuxt generate` before `nuxt start` for static target.'))
|
||||||
|
// })
|
||||||
|
|
||||||
test('no error if dist/ dir exists', async () => {
|
test('no error if dist/ dir exists', async () => {
|
||||||
mockGetNuxtConfig({ target: TARGETS.static })
|
mockGetNuxtConfig({ target: TARGETS.static })
|
||||||
|
|
|
@ -12,13 +12,13 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxt/utils": "2.15.6",
|
"@nuxt/utils": "2.15.6",
|
||||||
"consola": "^2.15.3",
|
"consola": "^2.15.3",
|
||||||
"defu": "^5.0.0",
|
"defu": "^6.0.0",
|
||||||
"destr": "^1.1.0",
|
"destr": "^1.1.1",
|
||||||
"dotenv": "^10.0.0",
|
"dotenv": "^10.0.0",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"rc9": "^1.2.0",
|
"rc9": "^1.2.2",
|
||||||
"std-env": "^3.0.1",
|
"std-env": "^3.1.1",
|
||||||
"ufo": "^0.7.9"
|
"ufo": "^0.8.4"
|
||||||
},
|
},
|
||||||
"publishConfig": {
|
"publishConfig": {
|
||||||
"access": "public"
|
"access": "public"
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
"@nuxt/server": "2.15.6",
|
"@nuxt/server": "2.15.6",
|
||||||
"@nuxt/utils": "2.15.6",
|
"@nuxt/utils": "2.15.6",
|
||||||
"consola": "^2.15.3",
|
"consola": "^2.15.3",
|
||||||
"fs-extra": "^10.0.0",
|
"fs-extra": "^10.1.0",
|
||||||
"hable": "^3.0.0",
|
"hable": "^3.0.0",
|
||||||
"hash-sum": "^2.0.0",
|
"hash-sum": "^2.0.0",
|
||||||
"lodash": "^4.17.21"
|
"lodash": "^4.17.21"
|
||||||
|
|
|
@ -11,12 +11,12 @@
|
||||||
"@nuxt/utils": "2.15.6",
|
"@nuxt/utils": "2.15.6",
|
||||||
"chalk": "^4.1.2",
|
"chalk": "^4.1.2",
|
||||||
"consola": "^2.15.3",
|
"consola": "^2.15.3",
|
||||||
"defu": "^5.0.0",
|
"defu": "^6.0.0",
|
||||||
"devalue": "^2.0.1",
|
"devalue": "^2.0.1",
|
||||||
"fs-extra": "^10.0.0",
|
"fs-extra": "^10.1.0",
|
||||||
"html-minifier": "^4.0.0",
|
"html-minifier": "^4.0.0",
|
||||||
"node-html-parser": "^5.1.0",
|
"node-html-parser": "^5.3.3",
|
||||||
"ufo": "^0.7.9"
|
"ufo": "^0.8.4"
|
||||||
},
|
},
|
||||||
"publishConfig": {
|
"publishConfig": {
|
||||||
"access": "public"
|
"access": "public"
|
||||||
|
|
|
@ -16,15 +16,15 @@
|
||||||
"consola": "^2.15.3",
|
"consola": "^2.15.3",
|
||||||
"etag": "^1.8.1",
|
"etag": "^1.8.1",
|
||||||
"fresh": "^0.5.2",
|
"fresh": "^0.5.2",
|
||||||
"fs-extra": "^10.0.0",
|
"fs-extra": "^10.1.0",
|
||||||
"ip": "^1.1.5",
|
"ip": "^1.1.8",
|
||||||
"launch-editor-middleware": "^2.2.1",
|
"launch-editor-middleware": "^2.4.0",
|
||||||
"on-headers": "^1.0.2",
|
"on-headers": "^1.0.2",
|
||||||
"pify": "^5.0.0",
|
"pify": "^5.0.0",
|
||||||
"serve-placeholder": "^1.2.4",
|
"serve-placeholder": "^1.2.4",
|
||||||
"serve-static": "^1.14.1",
|
"serve-static": "^1.15.0",
|
||||||
"server-destroy": "^1.0.1",
|
"server-destroy": "^1.0.1",
|
||||||
"ufo": "^0.7.9"
|
"ufo": "^0.8.4"
|
||||||
},
|
},
|
||||||
"publishConfig": {
|
"publishConfig": {
|
||||||
"access": "public"
|
"access": "public"
|
||||||
|
|
|
@ -30,6 +30,10 @@ jest.mock('../src/middleware/nuxt')
|
||||||
jest.mock('../src/middleware/error')
|
jest.mock('../src/middleware/error')
|
||||||
jest.mock('../src/middleware/timing')
|
jest.mock('../src/middleware/timing')
|
||||||
|
|
||||||
|
jest.mock('path', () => ({
|
||||||
|
...jest.requireActual('path')
|
||||||
|
}))
|
||||||
|
|
||||||
describe('server: server', () => {
|
describe('server: server', () => {
|
||||||
const createNuxt = () => ({
|
const createNuxt = () => ({
|
||||||
options: {
|
options: {
|
||||||
|
@ -71,6 +75,7 @@ describe('server: server', () => {
|
||||||
beforeAll(() => {
|
beforeAll(() => {
|
||||||
jest.spyOn(path, 'join').mockImplementation((...args) => `join(${args.join(', ')})`)
|
jest.spyOn(path, 'join').mockImplementation((...args) => `join(${args.join(', ')})`)
|
||||||
jest.spyOn(path, 'resolve').mockImplementation((...args) => `resolve(${args.join(', ')})`)
|
jest.spyOn(path, 'resolve').mockImplementation((...args) => `resolve(${args.join(', ')})`)
|
||||||
|
|
||||||
connect.mockReturnValue({ use: jest.fn() })
|
connect.mockReturnValue({ use: jest.fn() })
|
||||||
serveStatic.mockImplementation(dir => ({ id: 'test-serve-static', dir }))
|
serveStatic.mockImplementation(dir => ({ id: 'test-serve-static', dir }))
|
||||||
nuxtMiddleware.mockImplementation(options => ({
|
nuxtMiddleware.mockImplementation(options => ({
|
||||||
|
|
|
@ -3,18 +3,17 @@
|
||||||
* Documentation: https://nuxtjs.org/api/configuration-build
|
* Documentation: https://nuxtjs.org/api/configuration-build
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { TransformOptions, PluginItem } from '@babel/core'
|
import type { IncomingMessage, ServerResponse } from 'http'
|
||||||
import { Options as AutoprefixerOptions } from 'autoprefixer'
|
import type { TransformOptions, PluginItem } from '@babel/core'
|
||||||
import { Options as FileLoaderOptions } from 'file-loader'
|
import type { Options as AutoprefixerOptions } from 'autoprefixer'
|
||||||
import { Options as HtmlMinifierOptions } from 'html-minifier'
|
import type { Options as FileLoaderOptions } from 'file-loader'
|
||||||
import * as Less from 'less'
|
import type { Options as HtmlMinifierOptions } from 'html-minifier'
|
||||||
import { Options as SassOptions } from 'sass-loader'
|
import type { Options as OptimizeCssAssetsWebpackPluginOptions } from 'optimize-css-assets-webpack-plugin'
|
||||||
import { Options as OptimizeCssAssetsWebpackPluginOptions } from 'optimize-css-assets-webpack-plugin'
|
import type { Plugin as PostcssPlugin } from 'postcss'
|
||||||
import { Plugin as PostcssPlugin } from 'postcss'
|
import type { Options as PugOptions } from 'pug'
|
||||||
import { Options as PugOptions } from 'pug'
|
import type { TerserPluginOptions } from 'terser-webpack-plugin'
|
||||||
import { TerserPluginOptions } from 'terser-webpack-plugin'
|
import type { VueLoaderOptions } from 'vue-loader'
|
||||||
import { VueLoaderOptions } from 'vue-loader'
|
import type {
|
||||||
import {
|
|
||||||
Configuration as WebpackConfiguration,
|
Configuration as WebpackConfiguration,
|
||||||
Loader as WebpackLoader,
|
Loader as WebpackLoader,
|
||||||
loader as WebpackLoaderNamespace,
|
loader as WebpackLoaderNamespace,
|
||||||
|
@ -22,8 +21,9 @@ import {
|
||||||
Plugin as WebpackPlugin
|
Plugin as WebpackPlugin
|
||||||
} from 'webpack'
|
} from 'webpack'
|
||||||
import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'
|
import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'
|
||||||
import { Options as WebpackDevMiddlewareOptions } from 'webpack-dev-middleware'
|
import type { Options as WebpackDevMiddlewareOptions } from 'webpack-dev-middleware'
|
||||||
import { MiddlewareOptions as WebpackHotMiddlewareOptions, ClientOptions as WebpackHotMiddlewareClientOptions } from 'webpack-hot-middleware'
|
import type { MiddlewareOptions as WebpackHotMiddlewareOptions, ClientOptions as WebpackHotMiddlewareClientOptions } from 'webpack-hot-middleware'
|
||||||
|
import type { Options as SassOptions } from '../lib/sass-loader'
|
||||||
|
|
||||||
type CssLoaderUrlFunction = (url: string, resourcePath: string) => boolean
|
type CssLoaderUrlFunction = (url: string, resourcePath: string) => boolean
|
||||||
type CssLoaderImportFunction = (url: string, media: string, resourcePath: string) => boolean
|
type CssLoaderImportFunction = (url: string, media: string, resourcePath: string) => boolean
|
||||||
|
@ -145,7 +145,7 @@ export interface NuxtOptionsBuild {
|
||||||
corejs?: 'auto' | 2 | 3
|
corejs?: 'auto' | 2 | 3
|
||||||
crossorigin?: string
|
crossorigin?: string
|
||||||
cssSourceMap?: boolean
|
cssSourceMap?: boolean
|
||||||
devMiddleware?: WebpackDevMiddlewareOptions
|
devMiddleware?: WebpackDevMiddlewareOptions<IncomingMessage, ServerResponse>
|
||||||
devtools?: boolean
|
devtools?: boolean
|
||||||
extend?(
|
extend?(
|
||||||
config: WebpackConfiguration,
|
config: WebpackConfiguration,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* Documentation: https://nuxtjs.org/api/configuration-cli
|
* Documentation: https://nuxtjs.org/api/configuration-cli
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Chalk } from 'chalk'
|
import type { Chalk } from 'chalk'
|
||||||
|
|
||||||
type ChalkColor =
|
type ChalkColor =
|
||||||
'black' | 'red' | 'green' | 'yellow' | 'blue' | 'magenta' | 'cyan' | 'white' | 'blackBright' | 'gray' | 'grey' | 'redBright' | 'greenBright' | 'yellowBright' | 'blueBright' | 'magentaBright' | 'cyanBright' | 'whiteBright' | 'bgBlack' | 'bgRed' | 'bgGreen' | 'bgYellow' | 'bgBlue' | 'bgMagenta' | 'bgCyan' | 'bgWhite' | 'bgBlackBright' | 'bgGray' | 'bgGrey' | 'bgRedBright' | 'bgGreenBright' | 'bgYellowBright' | 'bgBlueBright' | 'bgMagentaBright' | 'bgCyanBright' | 'bgWhiteBright'
|
'black' | 'red' | 'green' | 'yellow' | 'blue' | 'magenta' | 'cyan' | 'white' | 'blackBright' | 'gray' | 'grey' | 'redBright' | 'greenBright' | 'yellowBright' | 'blueBright' | 'magentaBright' | 'cyanBright' | 'whiteBright' | 'bgBlack' | 'bgRed' | 'bgGreen' | 'bgYellow' | 'bgBlue' | 'bgMagenta' | 'bgCyan' | 'bgWhite' | 'bgBlackBright' | 'bgGray' | 'bgGrey' | 'bgRedBright' | 'bgGreenBright' | 'bgYellowBright' | 'bgBlueBright' | 'bgMagentaBright' | 'bgCyanBright' | 'bgWhiteBright'
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { GlobbyOptions } from 'globby'
|
import type { GlobbyOptions } from 'globby'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* NuxtOptionsGenerate
|
* NuxtOptionsGenerate
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
* https://nuxtjs.org/api/internals-generator#hooks
|
* https://nuxtjs.org/api/internals-generator#hooks
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Server as ConnectServer } from 'connect'
|
import type { Server as ConnectServer } from 'connect'
|
||||||
|
|
||||||
export interface NuxtOptionsHooks {
|
export interface NuxtOptionsHooks {
|
||||||
build?: {
|
build?: {
|
||||||
|
|
|
@ -1,23 +1,23 @@
|
||||||
import { Transition } from '../app'
|
import type { Transition } from '../app'
|
||||||
import { NuxtOptionsBuild } from './build'
|
import type { NuxtOptionsBuild } from './build'
|
||||||
import { NuxtOptionsCli } from './cli'
|
import type { NuxtOptionsCli } from './cli'
|
||||||
import { NuxtOptionsEnv } from './env'
|
import type { NuxtOptionsEnv } from './env'
|
||||||
import { NuxtOptionsFeatures } from './features'
|
import type { NuxtOptionsFeatures } from './features'
|
||||||
import { NuxtOptionsFetch } from './fetch'
|
import type { NuxtOptionsFetch } from './fetch'
|
||||||
import { NuxtOptionsGenerate } from './generate'
|
import type { NuxtOptionsGenerate } from './generate'
|
||||||
import { NuxtOptionsHead } from './head'
|
import type { NuxtOptionsHead } from './head'
|
||||||
import { NuxtOptionsHooks } from './hooks'
|
import type { NuxtOptionsHooks } from './hooks'
|
||||||
import { NuxtOptionsGlobals } from './globals'
|
import type { NuxtOptionsGlobals } from './globals'
|
||||||
import { NuxtOptionsLoading, NuxtOptionsLoadingIndicator } from './loading'
|
import type { NuxtOptionsLoading, NuxtOptionsLoadingIndicator } from './loading'
|
||||||
import { NuxtOptionsModule } from './module'
|
import type { NuxtOptionsModule } from './module'
|
||||||
import { NuxtOptionsPlugin } from './plugin'
|
import type { NuxtOptionsPlugin } from './plugin'
|
||||||
import { NuxtOptionsRender } from './render'
|
import type { NuxtOptionsRender } from './render'
|
||||||
import { NuxtOptionsRouter } from './router'
|
import type { NuxtOptionsRouter } from './router'
|
||||||
import { NuxtOptionsRuntimeConfig } from './runtime'
|
import type { NuxtOptionsRuntimeConfig } from './runtime'
|
||||||
import { NuxtOptionsServer } from './server'
|
import type { NuxtOptionsServer } from './server'
|
||||||
import { NuxtOptionsServerMiddleware } from './server-middleware'
|
import type { NuxtOptionsServerMiddleware } from './server-middleware'
|
||||||
import { NuxtOptionsVueConfiguration } from './vue-configuration'
|
import type { NuxtOptionsVueConfiguration } from './vue-configuration'
|
||||||
import { NuxtOptionsWatchers } from './watchers'
|
import type { NuxtOptionsWatchers } from './watchers'
|
||||||
|
|
||||||
export { Module } from './module'
|
export { Module } from './module'
|
||||||
export { ServerMiddleware } from './server-middleware'
|
export { ServerMiddleware } from './server-middleware'
|
||||||
|
|
|
@ -4,11 +4,11 @@
|
||||||
* https://nuxtjs.org/guide/modules
|
* https://nuxtjs.org/guide/modules
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Configuration as WebpackConfiguration } from 'webpack'
|
import type { Configuration as WebpackConfiguration } from 'webpack'
|
||||||
import { NuxtOptionsLoaders } from './build'
|
import type { NuxtOptionsLoaders } from './build'
|
||||||
import { NuxtRouteConfig } from './router'
|
import type { NuxtRouteConfig } from './router'
|
||||||
import { NuxtOptionsServerMiddleware } from './server-middleware'
|
import type { NuxtOptionsServerMiddleware } from './server-middleware'
|
||||||
import { NuxtOptions } from '.'
|
import type { NuxtOptions } from '.'
|
||||||
|
|
||||||
interface ExtendFunctionContext {
|
interface ExtendFunctionContext {
|
||||||
isClient: boolean
|
isClient: boolean
|
||||||
|
|
|
@ -7,13 +7,13 @@
|
||||||
* https://github.com/jshttp/etag#readme
|
* https://github.com/jshttp/etag#readme
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { ServerResponse } from 'http'
|
import type { ServerResponse } from 'http'
|
||||||
import { CompressionOptions } from 'compression'
|
import type { CompressionOptions } from 'compression'
|
||||||
import { IncomingMessage } from 'connect'
|
import type { IncomingMessage } from 'connect'
|
||||||
import { Options as EtagOptions } from 'etag'
|
import type { Options as EtagOptions } from 'etag'
|
||||||
import { ServeStaticOptions } from 'serve-static'
|
import type { ServeStaticOptions } from 'serve-static'
|
||||||
import { BundleRendererOptions } from 'vue-server-renderer'
|
import type { BundleRendererOptions } from 'vue-server-renderer'
|
||||||
import { NuxtOptionsServerMiddleware } from './server-middleware'
|
import type { NuxtOptionsServerMiddleware } from './server-middleware'
|
||||||
|
|
||||||
type NuxtEtagOptions = EtagOptions & {
|
type NuxtEtagOptions = EtagOptions & {
|
||||||
hash?: (html: string) => string
|
hash?: (html: string) => string
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* Documentation: https://nuxtjs.org/api/configuration-servermiddleware
|
* Documentation: https://nuxtjs.org/api/configuration-servermiddleware
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { NextHandleFunction } from 'connect'
|
import type { NextHandleFunction } from 'connect'
|
||||||
|
|
||||||
export type ServerMiddleware = NextHandleFunction
|
export type ServerMiddleware = NextHandleFunction
|
||||||
|
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
* https://webpack.js.org/configuration/watch/#watchoptions
|
* https://webpack.js.org/configuration/watch/#watchoptions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { WatchOptions as ChokidarWatchOptions } from 'chokidar'
|
import type { WatchOptions as ChokidarWatchOptions } from 'chokidar'
|
||||||
import { WatchOptions as WebpackWatchOptions } from 'webpack'
|
import type { WatchOptions as WebpackWatchOptions } from 'webpack'
|
||||||
|
|
||||||
export type NuxtOptionsWatchers = {
|
export type NuxtOptionsWatchers = {
|
||||||
chokidar?: ChokidarWatchOptions
|
chokidar?: ChokidarWatchOptions
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import '@nuxt/components'
|
import '@nuxt/components'
|
||||||
import '@nuxt/telemetry'
|
import '@nuxt/telemetry'
|
||||||
import './process'
|
import './process'
|
||||||
|
import './shims'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Note: `export * from './app'` does not work well with TypeScript < 3.9
|
* Note: `export * from './app'` does not work well with TypeScript < 3.9
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
// Type definitions for sass-loader 8.0
|
||||||
|
// Project: https://github.com/webpack-contrib/sass-loader
|
||||||
|
// Definitions by: Jason Kwok <https://github.com/JasonHK>
|
||||||
|
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
||||||
|
// TypeScript Version: 3.7
|
||||||
|
|
||||||
|
import { LoaderOptions } from './interfaces'
|
||||||
|
|
||||||
|
declare function loader(content: string): void;
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-redeclare
|
||||||
|
declare namespace loader {
|
||||||
|
type Options = LoaderOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
export = loader;
|
|
@ -0,0 +1,442 @@
|
||||||
|
import * as Sass from 'sass'
|
||||||
|
import * as Webpack from 'webpack'
|
||||||
|
|
||||||
|
export interface LoaderOptions {
|
||||||
|
/**
|
||||||
|
* The special `implementation` option determines which implementation of Sass
|
||||||
|
* to use.
|
||||||
|
*
|
||||||
|
* By default the loader resolve the implementation based on your dependencies.
|
||||||
|
* Just add required implementation to `package.json` (`node-sass` or `sass`
|
||||||
|
* package) and install dependencies.
|
||||||
|
*
|
||||||
|
* Example where the `sass-loader` loader uses the `sass` (`dart-sass`)
|
||||||
|
* implementation:
|
||||||
|
*
|
||||||
|
* **package.json**
|
||||||
|
*
|
||||||
|
* ```json
|
||||||
|
* {
|
||||||
|
* "devDependencies": {
|
||||||
|
* "sass-loader": "^7.2.0",
|
||||||
|
* "sass": "^1.22.10"
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Example where the `sass-loader` loader uses the `node-sass` implementation:
|
||||||
|
*
|
||||||
|
* **package.json**
|
||||||
|
*
|
||||||
|
* ```json
|
||||||
|
* {
|
||||||
|
* "devDependencies": {
|
||||||
|
* "sass-loader": "^7.2.0",
|
||||||
|
* "node-sass": "^4.0.0"
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Beware the situation when `node-sass` and `sass` were installed! By default
|
||||||
|
* the `sass-loader` prefers `node-sass`. In order to avoid this situation you
|
||||||
|
* can use the `implementation` option.
|
||||||
|
*
|
||||||
|
* The `implementation` options either accepts `node-sass` or `sass` (`Dart Sass`)
|
||||||
|
* as a module.
|
||||||
|
*
|
||||||
|
* For example, to use Dart Sass, you'd pass:
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* module.exports = {
|
||||||
|
* module: {
|
||||||
|
* rules: [
|
||||||
|
* {
|
||||||
|
* test: /\.s[ac]ss$/i,
|
||||||
|
* use: [
|
||||||
|
* 'style-loader',
|
||||||
|
* 'css-loader',
|
||||||
|
* {
|
||||||
|
* loader: 'sass-loader',
|
||||||
|
* options: {
|
||||||
|
* // Prefer `dart-sass`
|
||||||
|
* implementation: require('sass'),
|
||||||
|
* },
|
||||||
|
* },
|
||||||
|
* ],
|
||||||
|
* },
|
||||||
|
* ],
|
||||||
|
* },
|
||||||
|
* };
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Note that when using `sass` (`Dart Sass`), **synchronous compilation is twice
|
||||||
|
* as fast as asynchronous compilation** by default, due to the overhead of
|
||||||
|
* asynchronous callbacks. To avoid this overhead, you can use the [fibers](https://www.npmjs.com/package/fibers)
|
||||||
|
* package to call asynchronous importers from the synchronous code path.
|
||||||
|
*
|
||||||
|
* We automatically inject the [`fibers`](https://github.com/laverdet/node-fibers)
|
||||||
|
* package (setup `sassOptions.fiber`) if is possible (i.e. you need install the
|
||||||
|
* [`fibers`](https://github.com/laverdet/node-fibers) package).
|
||||||
|
*
|
||||||
|
* **package.json**
|
||||||
|
*
|
||||||
|
* ```json
|
||||||
|
* {
|
||||||
|
* "devDependencies": {
|
||||||
|
* "sass-loader": "^7.2.0",
|
||||||
|
* "sass": "^1.22.10",
|
||||||
|
* "fibers": "^4.0.1"
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* You can disable automatically injecting the [`fibers`](https://github.com/laverdet/node-fibers)
|
||||||
|
* package by passing a `false` value for the `sassOptions.fiber` option.
|
||||||
|
*
|
||||||
|
* **webpack.config.js**
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* module.exports = {
|
||||||
|
* module: {
|
||||||
|
* rules: [
|
||||||
|
* {
|
||||||
|
* test: /\.s[ac]ss$/i,
|
||||||
|
* use: [
|
||||||
|
* 'style-loader',
|
||||||
|
* 'css-loader',
|
||||||
|
* {
|
||||||
|
* loader: 'sass-loader',
|
||||||
|
* options: {
|
||||||
|
* implementation: require('sass'),
|
||||||
|
* sassOptions: {
|
||||||
|
* fiber: false,
|
||||||
|
* },
|
||||||
|
* },
|
||||||
|
* },
|
||||||
|
* ],
|
||||||
|
* },
|
||||||
|
* ],
|
||||||
|
* },
|
||||||
|
* };
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* You can also pass the `fiber` value using this code:
|
||||||
|
*
|
||||||
|
* **webpack.config.js**
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* module.exports = {
|
||||||
|
* module: {
|
||||||
|
* rules: [
|
||||||
|
* {
|
||||||
|
* test: /\.s[ac]ss$/i,
|
||||||
|
* use: [
|
||||||
|
* 'style-loader',
|
||||||
|
* 'css-loader',
|
||||||
|
* {
|
||||||
|
* loader: 'sass-loader',
|
||||||
|
* options: {
|
||||||
|
* implementation: require('sass'),
|
||||||
|
* sassOptions: {
|
||||||
|
* fiber: require('fibers'),
|
||||||
|
* },
|
||||||
|
* },
|
||||||
|
* },
|
||||||
|
* ],
|
||||||
|
* },
|
||||||
|
* ],
|
||||||
|
* },
|
||||||
|
* };
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
implementation?: any;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Options for [Node Sass](https://github.com/sass/node-sass) or [Dart Sass](http://sass-lang.com/dart-sass)
|
||||||
|
* implementation.
|
||||||
|
*
|
||||||
|
* > ℹ️ The `indentedSyntax` option has `true` value for the `sass` extension.
|
||||||
|
*
|
||||||
|
* > ℹ️ Options such as `file` and `outFile` are unavailable.
|
||||||
|
*
|
||||||
|
* > ℹ️ We recommend not to use the `sourceMapContents`, `sourceMapEmbed`,
|
||||||
|
* `sourceMapRoot` options because `sass-loader` automatically sets these
|
||||||
|
* options.
|
||||||
|
*
|
||||||
|
* There is a slight difference between the `node-sass` and `sass` (`Dart Sass`)
|
||||||
|
* options. Please consult documentation before using them:
|
||||||
|
*
|
||||||
|
* - [Node Sass documentation](https://github.com/sass/node-sass/#options) for
|
||||||
|
* all available `node-sass` options.
|
||||||
|
* - [Dart Sass documentation](https://github.com/sass/dart-sass#javascript-api)
|
||||||
|
* for all available `sass` options.
|
||||||
|
*
|
||||||
|
* #### `Object`
|
||||||
|
*
|
||||||
|
* Use and object for the Sass implementation setup.
|
||||||
|
*
|
||||||
|
* **webpack.config.js**
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* module.exports = {
|
||||||
|
* module: {
|
||||||
|
* rules: [
|
||||||
|
* {
|
||||||
|
* test: /\.s[ac]ss$/i,
|
||||||
|
* use: [
|
||||||
|
* 'style-loader',
|
||||||
|
* 'css-loader',
|
||||||
|
* {
|
||||||
|
* loader: 'sass-loader',
|
||||||
|
* options: {
|
||||||
|
* sassOptions: {
|
||||||
|
* indentWidth: 4,
|
||||||
|
* includePaths: ['absolute/path/a', 'absolute/path/b'],
|
||||||
|
* },
|
||||||
|
* },
|
||||||
|
* },
|
||||||
|
* ],
|
||||||
|
* },
|
||||||
|
* ],
|
||||||
|
* },
|
||||||
|
* };
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* #### `Function`
|
||||||
|
*
|
||||||
|
* Allows to setup the Sass implementation by setting different options based on
|
||||||
|
* the loader context.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* module.exports = {
|
||||||
|
* module: {
|
||||||
|
* rules: [
|
||||||
|
* {
|
||||||
|
* test: /\.s[ac]ss$/i,
|
||||||
|
* use: [
|
||||||
|
* 'style-loader',
|
||||||
|
* 'css-loader',
|
||||||
|
* {
|
||||||
|
* loader: 'sass-loader',
|
||||||
|
* options: {
|
||||||
|
* sassOptions: (loaderContext) => {
|
||||||
|
* // More information about available properties https://webpack.js.org/api/loaders/
|
||||||
|
* const { resourcePath, rootContext } = loaderContext;
|
||||||
|
* const relativePath = path.relative(rootContext, resourcePath);
|
||||||
|
*
|
||||||
|
* if (relativePath === 'styles/foo.scss') {
|
||||||
|
* return {
|
||||||
|
* includePaths: ['absolute/path/c', 'absolute/path/d'],
|
||||||
|
* };
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* return {
|
||||||
|
* includePaths: ['absolute/path/a', 'absolute/path/b'],
|
||||||
|
* };
|
||||||
|
* },
|
||||||
|
* },
|
||||||
|
* },
|
||||||
|
* ],
|
||||||
|
* },
|
||||||
|
* ],
|
||||||
|
* },
|
||||||
|
* };
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
sassOptions?: LoaderOptions.SassOptions | LoaderOptions.Callback<LoaderOptions.SassOptions> | undefined;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepends `Sass`/`SCSS` code before the actual entry file. In this case, the
|
||||||
|
* `sass-loader` will not override the `data` option but just append the entry's
|
||||||
|
* content.
|
||||||
|
*
|
||||||
|
* This is especially useful when some of your Sass variables depend on the
|
||||||
|
* environment:
|
||||||
|
*
|
||||||
|
* > ℹ Since you're injecting code, this will break the source mappings in your
|
||||||
|
* entry file. Often there's a simpler solution than this, like multiple Sass
|
||||||
|
* entry files.
|
||||||
|
*
|
||||||
|
* #### `String`
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* module.exports = {
|
||||||
|
* module: {
|
||||||
|
* rules: [
|
||||||
|
* {
|
||||||
|
* test: /\.s[ac]ss$/i,
|
||||||
|
* use: [
|
||||||
|
* 'style-loader',
|
||||||
|
* 'css-loader',
|
||||||
|
* {
|
||||||
|
* loader: 'sass-loader',
|
||||||
|
* options: {
|
||||||
|
* prependData: '$env: ' + process.env.NODE_ENV + ';',
|
||||||
|
* },
|
||||||
|
* },
|
||||||
|
* ],
|
||||||
|
* },
|
||||||
|
* ],
|
||||||
|
* },
|
||||||
|
* };
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* #### `Function`
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* module.exports = {
|
||||||
|
* module: {
|
||||||
|
* rules: [
|
||||||
|
* {
|
||||||
|
* test: /\.s[ac]ss$/i,
|
||||||
|
* use: [
|
||||||
|
* 'style-loader',
|
||||||
|
* 'css-loader',
|
||||||
|
* {
|
||||||
|
* loader: 'sass-loader',
|
||||||
|
* options: {
|
||||||
|
* prependData: (loaderContext) => {
|
||||||
|
* // More information about available properties https://webpack.js.org/api/loaders/
|
||||||
|
* const { resourcePath, rootContext } = loaderContext;
|
||||||
|
* const relativePath = path.relative(rootContext, resourcePath);
|
||||||
|
*
|
||||||
|
* if (relativePath === 'styles/foo.scss') {
|
||||||
|
* return '$value: 100px;';
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* return '$value: 200px;';
|
||||||
|
* },
|
||||||
|
* },
|
||||||
|
* },
|
||||||
|
* ],
|
||||||
|
* },
|
||||||
|
* ],
|
||||||
|
* },
|
||||||
|
* };
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* @default
|
||||||
|
* undefined
|
||||||
|
*/
|
||||||
|
additionalData?: string | LoaderOptions.Callback<string> | undefined;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enables/Disables generation of source maps.
|
||||||
|
*
|
||||||
|
* By default generation of source maps depends on the [`devtool`](https://webpack.js.org/configuration/devtool/)
|
||||||
|
* option. All values enable source map generation except `eval` and `false`
|
||||||
|
* value.
|
||||||
|
*
|
||||||
|
* **webpack.config.js**
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* module.exports = {
|
||||||
|
* module: {
|
||||||
|
* rules: [
|
||||||
|
* {
|
||||||
|
* test: /\.s[ac]ss$/i,
|
||||||
|
* use: [
|
||||||
|
* 'style-loader',
|
||||||
|
* {
|
||||||
|
* loader: 'css-loader',
|
||||||
|
* options: {
|
||||||
|
* sourceMap: true,
|
||||||
|
* },
|
||||||
|
* },
|
||||||
|
* {
|
||||||
|
* loader: 'sass-loader',
|
||||||
|
* options: {
|
||||||
|
* sourceMap: true,
|
||||||
|
* },
|
||||||
|
* },
|
||||||
|
* ],
|
||||||
|
* },
|
||||||
|
* ],
|
||||||
|
* },
|
||||||
|
* };
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* > ℹ In some rare cases `node-sass` can output invalid source maps (it is a
|
||||||
|
* `node-sass` bug). In order to avoid this, you can try to update `node-sass`
|
||||||
|
* to latest version or you can try to set within `sassOptions` the
|
||||||
|
* `outputStyle` option to `compressed`.
|
||||||
|
*
|
||||||
|
* @defaults
|
||||||
|
* Depends on the `compiler.devtool` value.
|
||||||
|
*/
|
||||||
|
sourceMap?: boolean | undefined;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enables/Disables the default Webpack importer.
|
||||||
|
*
|
||||||
|
* This can improve performance in some cases. Use it with caution because
|
||||||
|
* aliases and `@import` at-rules starting with `~` will not work. You can pass
|
||||||
|
* own `importer` to solve this (see [`importer docs`](https://github.com/sass/node-sass#importer--v200---experimental)).
|
||||||
|
*
|
||||||
|
* **webpack.config.js**
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* module.exports = {
|
||||||
|
* module: {
|
||||||
|
* rules: [
|
||||||
|
* {
|
||||||
|
* test: /\.s[ac]ss$/i,
|
||||||
|
* use: [
|
||||||
|
* 'style-loader',
|
||||||
|
* 'css-loader',
|
||||||
|
* {
|
||||||
|
* loader: 'sass-loader',
|
||||||
|
* options: {
|
||||||
|
* webpackImporter: false,
|
||||||
|
* },
|
||||||
|
* },
|
||||||
|
* ],
|
||||||
|
* },
|
||||||
|
* ],
|
||||||
|
* },
|
||||||
|
* };
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* @default
|
||||||
|
* true
|
||||||
|
*/
|
||||||
|
webpackImporter?: boolean | undefined;
|
||||||
|
/**
|
||||||
|
* Treats the @warn rule as a webpack warning.
|
||||||
|
*
|
||||||
|
* Note: It will be true by default in the next major release.
|
||||||
|
*
|
||||||
|
* **webpack.config.js**
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* module.exports = {
|
||||||
|
* module: {
|
||||||
|
* rules: [
|
||||||
|
* {
|
||||||
|
* test: /\.s[ac]ss$/i,
|
||||||
|
* use: [
|
||||||
|
* 'style-loader',
|
||||||
|
* 'css-loader',
|
||||||
|
* {
|
||||||
|
* loader: 'sass-loader',
|
||||||
|
* options: {
|
||||||
|
* warnRuleAsWarning: false,
|
||||||
|
* },
|
||||||
|
* },
|
||||||
|
* ],
|
||||||
|
* },
|
||||||
|
* ],
|
||||||
|
* },
|
||||||
|
* };
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
warnRuleAsWarning ?: boolean | undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-redeclare
|
||||||
|
export namespace LoaderOptions {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
|
type Callback<T> = (loaderContext: Webpack.loader.LoaderContext) => T;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
|
type SassOptions = Sass.Options<'sync'>;
|
||||||
|
}
|
|
@ -12,24 +12,22 @@
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/autoprefixer": "9.7.2",
|
"@types/autoprefixer": "9.7.2",
|
||||||
"@types/babel__core": "7.1.16",
|
"@types/babel__core": "7.1.19",
|
||||||
"@types/compression": "1.7.2",
|
"@types/compression": "1.7.2",
|
||||||
"@types/connect": "3.4.35",
|
"@types/connect": "3.4.35",
|
||||||
"@types/etag": "1.8.1",
|
"@types/etag": "1.8.1",
|
||||||
"@types/file-loader": "5.0.1",
|
"@types/file-loader": "5.0.1",
|
||||||
"@types/html-minifier": "4.0.1",
|
"@types/html-minifier": "4.0.2",
|
||||||
"@types/less": "3.0.3",
|
"@types/less": "3.0.3",
|
||||||
"@types/node": "14.17.32",
|
"@types/node": "18.0.0",
|
||||||
"@types/optimize-css-assets-webpack-plugin": "5.0.4",
|
"@types/optimize-css-assets-webpack-plugin": "5.0.5",
|
||||||
"@types/pug": "2.0.5",
|
"@types/pug": "2.0.6",
|
||||||
"@types/sass-loader": "8.0.2",
|
|
||||||
"@types/serve-static": "1.13.10",
|
"@types/serve-static": "1.13.10",
|
||||||
"@types/terser-webpack-plugin": "4.2.1",
|
"@types/terser-webpack-plugin": "4.2.1",
|
||||||
"@types/webpack": "4.41.31",
|
"@types/webpack": "4.41.32",
|
||||||
"@types/webpack-bundle-analyzer": "3.9.3",
|
"@types/webpack-bundle-analyzer": "4.4.1",
|
||||||
"@types/webpack-dev-middleware": "4.1.2",
|
"@types/webpack-dev-middleware": "5.3.0",
|
||||||
"@types/webpack-hot-middleware": "2.25.5",
|
"@types/webpack-hot-middleware": "2.25.6"
|
||||||
"sass-loader": "10.1.1"
|
|
||||||
},
|
},
|
||||||
"publishConfig": {
|
"publishConfig": {
|
||||||
"access": "public"
|
"access": "public"
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
declare module 'webpack' {
|
||||||
|
export type MultiStats = never
|
||||||
|
interface Compiler {
|
||||||
|
watching?: any
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export {}
|
|
@ -4,10 +4,11 @@
|
||||||
"moduleResolution": "Node",
|
"moduleResolution": "Node",
|
||||||
"strict": true,
|
"strict": true,
|
||||||
"noEmit": true,
|
"noEmit": true,
|
||||||
|
"skipLibCheck": true,
|
||||||
"lib": [
|
"lib": [
|
||||||
"ESNext",
|
"ESNext",
|
||||||
"ESNext.AsyncIterable",
|
"ESNext.AsyncIterable",
|
||||||
"DOM"
|
"DOM"
|
||||||
]
|
],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,16 +10,16 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"consola": "^2.15.3",
|
"consola": "^2.15.3",
|
||||||
"create-require": "^1.1.1",
|
"create-require": "^1.1.1",
|
||||||
"fs-extra": "^10.0.0",
|
"fs-extra": "^10.1.0",
|
||||||
"hash-sum": "^2.0.0",
|
"hash-sum": "^2.0.0",
|
||||||
"jiti": "^1.12.9",
|
"jiti": "^1.14.0",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"proper-lockfile": "^4.1.2",
|
"proper-lockfile": "^4.1.2",
|
||||||
"semver": "^7.3.5",
|
"semver": "^7.3.7",
|
||||||
"serialize-javascript": "^6.0.0",
|
"serialize-javascript": "^6.0.0",
|
||||||
"signal-exit": "^3.0.5",
|
"signal-exit": "^3.0.7",
|
||||||
"ua-parser-js": "^1.0.2",
|
"ua-parser-js": "^1.0.2",
|
||||||
"ufo": "^0.7.9"
|
"ufo": "^0.8.4"
|
||||||
},
|
},
|
||||||
"publishConfig": {
|
"publishConfig": {
|
||||||
"access": "public"
|
"access": "public"
|
||||||
|
|
|
@ -3,7 +3,7 @@ export default {
|
||||||
ignoreUnused: [
|
ignoreUnused: [
|
||||||
// used in vue-app
|
// used in vue-app
|
||||||
'ufo',
|
'ufo',
|
||||||
'node-fetch',
|
'node-fetch-native',
|
||||||
'unfetch',
|
'unfetch',
|
||||||
'vue',
|
'vue',
|
||||||
'vue-client-only',
|
'vue-client-only',
|
||||||
|
|
|
@ -13,14 +13,14 @@
|
||||||
"index.d.ts"
|
"index.d.ts"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"node-fetch": "^2.6.6",
|
"node-fetch-native": "^0.1.4",
|
||||||
"ufo": "^0.7.9",
|
"ufo": "^0.8.4",
|
||||||
"unfetch": "^4.2.0",
|
"unfetch": "^4.2.0",
|
||||||
"vue": "^2.6.14",
|
"vue": "^2.6.14",
|
||||||
"vue-client-only": "^2.1.0",
|
"vue-client-only": "^2.1.0",
|
||||||
"vue-meta": "^2.4.0",
|
"vue-meta": "^2.4.0",
|
||||||
"vue-no-ssr": "^1.1.1",
|
"vue-no-ssr": "^1.1.1",
|
||||||
"vue-router": "^3.5.3",
|
"vue-router": "^3.5.4",
|
||||||
"vue-template-compiler": "^2.6.14",
|
"vue-template-compiler": "^2.6.14",
|
||||||
"vuex": "^3.6.2"
|
"vuex": "^3.6.2"
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,50 +1,50 @@
|
||||||
import Vue from 'vue'
|
import Vue from 'vue'
|
||||||
import { joinURL, normalizeURL, withQuery } from 'ufo'
|
import { joinURL, normalizeURL, withQuery } from 'ufo'
|
||||||
<% if (fetch.server) { %>import fetch from 'node-fetch'<% } %>
|
<% if (fetch.server) { %>import fetch from 'node-fetch-native'<% } %>
|
||||||
<% if (features.middleware) { %>import middleware from './middleware.js'<% } %>
|
<% if (features.middleware) { %>import middleware from './middleware.js'<% } %>
|
||||||
import {
|
import {
|
||||||
<% if (features.asyncData) { %>applyAsyncData,<% } %>
|
<% if (features.asyncData) { %> applyAsyncData,<% } %>
|
||||||
<% if (features.middleware) { %>middlewareSeries,<% } %>
|
<% if (features.middleware) { %> middlewareSeries,<% } %>
|
||||||
<% if (features.middleware && features.layouts) { %>sanitizeComponent,<% } %>
|
<% if (features.middleware && features.layouts) { %> sanitizeComponent,<% } %>
|
||||||
getMatchedComponents,
|
getMatchedComponents,
|
||||||
promisify
|
promisify
|
||||||
} from './utils.js'
|
} from './utils.js'
|
||||||
<% if (features.fetch) { %>import fetchMixin from './mixins/fetch.server'<% } %>
|
<% if (features.fetch) { %>import fetchMixin from './mixins/fetch.server'<% } %>
|
||||||
import { createApp<% if (features.layouts) { %>, NuxtError<% } %> } from './index.js'
|
import { createApp<% if (features.layouts) { %>, NuxtError <% } %> } from './index.js'
|
||||||
import NuxtLink from './components/nuxt-link.server.js' // should be included after ./index.js
|
import NuxtLink from './components/nuxt-link.server.js' // should be included after ./index.js
|
||||||
|
|
||||||
<% if (features.fetch) { %>
|
<% if (features.fetch) { %>
|
||||||
// Update serverPrefetch strategy
|
// Update serverPrefetch strategy
|
||||||
Vue.config.optionMergeStrategies.serverPrefetch = Vue.config.optionMergeStrategies.created
|
Vue.config.optionMergeStrategies.serverPrefetch = Vue.config.optionMergeStrategies.created
|
||||||
|
|
||||||
// Fetch mixin
|
// Fetch mixin
|
||||||
if (!Vue.__nuxt__fetch__mixin__) {
|
if (!Vue.__nuxt__fetch__mixin__) {
|
||||||
Vue.mixin(fetchMixin)
|
Vue.mixin(fetchMixin)
|
||||||
Vue.__nuxt__fetch__mixin__ = true
|
Vue.__nuxt__fetch__mixin__ = true
|
||||||
}
|
}
|
||||||
<% } %>
|
<% } %>
|
||||||
|
|
||||||
<% if (isDev) { %>
|
<% if (isDev) { %>
|
||||||
if (!Vue.__original_use__) {
|
if (!Vue.__original_use__) {
|
||||||
Vue.__original_use__ = Vue.use
|
Vue.__original_use__ = Vue.use
|
||||||
Vue.__install_times__ = 0
|
Vue.__install_times__ = 0
|
||||||
Vue.use = function (plugin, ...args) {
|
Vue.use = function (plugin, ...args) {
|
||||||
plugin.__nuxt_external_installed__ = Vue._installedPlugins.includes(plugin)
|
plugin.__nuxt_external_installed__ = Vue._installedPlugins.includes(plugin)
|
||||||
return Vue.__original_use__(plugin, ...args)
|
return Vue.__original_use__(plugin, ...args)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
if (Vue.__install_times__ === 2) {
|
||||||
if (Vue.__install_times__ === 2) {
|
Vue.__install_times__ = 0
|
||||||
Vue.__install_times__ = 0
|
Vue._installedPlugins = Vue._installedPlugins.filter(plugin => {
|
||||||
Vue._installedPlugins = Vue._installedPlugins.filter(plugin => {
|
return plugin.__nuxt_external_installed__ === true
|
||||||
return plugin.__nuxt_external_installed__ === true
|
})
|
||||||
})
|
}
|
||||||
}
|
Vue.__install_times__++
|
||||||
Vue.__install_times__++
|
<% } %>
|
||||||
<% } %>
|
|
||||||
|
|
||||||
// Component: <NuxtLink>
|
// Component: <NuxtLink>
|
||||||
Vue.component(NuxtLink.name, NuxtLink)
|
Vue.component(NuxtLink.name, NuxtLink)
|
||||||
<% if (features.componentAliases) { %>Vue.component('NLink', NuxtLink)<% } %>
|
<% if (features.componentAliases) { %> Vue.component('NLink', NuxtLink) <% } %>
|
||||||
|
|
||||||
<% if (fetch.server) { %>if (!global.fetch) { global.fetch = fetch }<% } %>
|
<% if (fetch.server) { %>if (!global.fetch) { global.fetch = fetch }<% } %>
|
||||||
|
|
||||||
|
@ -88,9 +88,10 @@ export default async (ssrContext) => {
|
||||||
// for beforeSerialize(nuxtState)
|
// for beforeSerialize(nuxtState)
|
||||||
ssrContext.beforeSerializeFns = []
|
ssrContext.beforeSerializeFns = []
|
||||||
// Nuxt object (window.{{globals.context}}, defaults to window.__NUXT__)
|
// Nuxt object (window.{{globals.context}}, defaults to window.__NUXT__)
|
||||||
ssrContext.nuxt = { <% if (features.layouts) { %>layout: 'default', <% } %>data: [], <% if (features.fetch) { %>fetch: {}, <% } %>error: null<%= (store ? ', state: null' : '') %>, serverRendered: true, routePath: '' }
|
ssrContext.nuxt = { <% if (features.layouts) { %> layout: 'default', <% } %> data: [], <% if (features.fetch) { %> fetch: { }, <% } %> error: null <%= (store ? ', state: null' : '') %>, serverRendered: true, routePath: ''
|
||||||
|
}
|
||||||
<% if (features.fetch) { %>
|
<% if (features.fetch) { %>
|
||||||
ssrContext.fetchCounters = {}
|
ssrContext.fetchCounters = { }
|
||||||
<% } %>
|
<% } %>
|
||||||
|
|
||||||
// Remove query from url is static target
|
// Remove query from url is static target
|
||||||
|
@ -101,36 +102,36 @@ export default async (ssrContext) => {
|
||||||
<% } %>
|
<% } %>
|
||||||
// Public runtime config
|
// Public runtime config
|
||||||
ssrContext.nuxt.config = ssrContext.runtimeConfig.public
|
ssrContext.nuxt.config = ssrContext.runtimeConfig.public
|
||||||
if (ssrContext.nuxt.config._app) {
|
if (ssrContext.nuxt.config._app) {
|
||||||
__webpack_public_path__ = joinURL(ssrContext.nuxt.config._app.cdnURL, ssrContext.nuxt.config._app.assetsPath)
|
__webpack_public_path__ = joinURL(ssrContext.nuxt.config._app.cdnURL, ssrContext.nuxt.config._app.assetsPath)
|
||||||
}
|
}
|
||||||
// Create the app definition and the instance (created for each request)
|
// Create the app definition and the instance (created for each request)
|
||||||
const { app, router<%= (store ? ', store' : '') %> } = await createApp(ssrContext, ssrContext.runtimeConfig.private)
|
const { app, router<%= (store ? ', store' : '') %> } = await createApp(ssrContext, ssrContext.runtimeConfig.private)
|
||||||
const _app = new Vue(app)
|
const _app = new Vue(app)
|
||||||
// Add ssr route path to nuxt context so we can account for page navigation between ssr and csr
|
// Add ssr route path to nuxt context so we can account for page navigation between ssr and csr
|
||||||
ssrContext.nuxt.routePath = app.context.route.path
|
ssrContext.nuxt.routePath = app.context.route.path
|
||||||
|
|
||||||
<% if (features.meta) { %>
|
<% if (features.meta) { %>
|
||||||
// Add meta infos (used in renderer.js)
|
// Add meta infos (used in renderer.js)
|
||||||
ssrContext.meta = _app.$meta()
|
ssrContext.meta = _app.$meta()
|
||||||
<% } %>
|
<% } %>
|
||||||
<% if (features.asyncData) { %>
|
<% if (features.asyncData) { %>
|
||||||
// Keep asyncData for each matched component in ssrContext (used in app/utils.js via this.$ssrContext)
|
// Keep asyncData for each matched component in ssrContext (used in app/utils.js via this.$ssrContext)
|
||||||
ssrContext.asyncData = {}
|
ssrContext.asyncData = { }
|
||||||
<% } %>
|
<% } %>
|
||||||
|
|
||||||
const beforeRender = async () => {
|
const beforeRender = async () => {
|
||||||
// Call beforeNuxtRender() methods
|
// Call beforeNuxtRender() methods
|
||||||
await Promise.all(ssrContext.beforeRenderFns.map(fn => promisify(fn, { Components, nuxtState: ssrContext.nuxt })))
|
await Promise.all(ssrContext.beforeRenderFns.map(fn => promisify(fn, { Components, nuxtState: ssrContext.nuxt })))
|
||||||
|
|
||||||
ssrContext.rendered = () => {
|
ssrContext.rendered = () => {
|
||||||
// Call beforeSerialize() hooks
|
// Call beforeSerialize() hooks
|
||||||
ssrContext.beforeSerializeFns.forEach(fn => fn(ssrContext.nuxt))
|
ssrContext.beforeSerializeFns.forEach(fn => fn(ssrContext.nuxt))
|
||||||
|
|
||||||
<% if (store) { %>
|
<% if (store) { %>
|
||||||
// Add the state from the vuex store
|
// Add the state from the vuex store
|
||||||
ssrContext.nuxt.state = store.state
|
ssrContext.nuxt.state = store.state
|
||||||
<% } %>
|
<% } %>
|
||||||
|
|
||||||
<% if (isFullStatic && store) { %>
|
<% if (isFullStatic && store) { %>
|
||||||
// Stop recording store mutations
|
// Stop recording store mutations
|
||||||
|
@ -140,13 +141,13 @@ export default async (ssrContext) => {
|
||||||
}
|
}
|
||||||
<% } %>
|
<% } %>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const renderErrorPage = async () => {
|
const renderErrorPage = async () => {
|
||||||
// Don't server-render the page in static target
|
// Don't server-render the page in static target
|
||||||
if (ssrContext.target === 'static') {
|
if (ssrContext.target === 'static') {
|
||||||
ssrContext.nuxt.serverRendered = false
|
ssrContext.nuxt.serverRendered = false
|
||||||
}
|
}
|
||||||
<% if (features.layouts) { %>
|
<% if (features.layouts) { %>
|
||||||
// Load layout for error page
|
// Load layout for error page
|
||||||
const layout = (NuxtError.options || NuxtError).layout
|
const layout = (NuxtError.options || NuxtError).layout
|
||||||
|
@ -154,16 +155,16 @@ export default async (ssrContext) => {
|
||||||
ssrContext.nuxt.layout = errLayout || 'default'
|
ssrContext.nuxt.layout = errLayout || 'default'
|
||||||
await _app.loadLayout(errLayout)
|
await _app.loadLayout(errLayout)
|
||||||
_app.setLayout(errLayout)
|
_app.setLayout(errLayout)
|
||||||
<% } %>
|
<% } %>
|
||||||
await beforeRender()
|
await beforeRender()
|
||||||
return _app
|
return _app
|
||||||
}
|
}
|
||||||
const render404Page = () => {
|
const render404Page = () => {
|
||||||
app.context.error({ statusCode: 404, path: ssrContext.url, message: '<%= messages.error_404 %>' })
|
app.context.error({ statusCode: 404, path: ssrContext.url, message: '<%= messages.error_404 %>' })
|
||||||
return renderErrorPage()
|
return renderErrorPage()
|
||||||
}
|
}
|
||||||
|
|
||||||
<% if (debug) { %>const s = Date.now()<% } %>
|
<% if (debug) { %>const s = Date.now() <% } %>
|
||||||
|
|
||||||
// Components are already resolved by setContext -> getRouteData (app/utils.js)
|
// Components are already resolved by setContext -> getRouteData (app/utils.js)
|
||||||
const Components = getMatchedComponents(app.context.route)
|
const Components = getMatchedComponents(app.context.route)
|
||||||
|
@ -173,20 +174,20 @@ export default async (ssrContext) => {
|
||||||
** Dispatch store nuxtServerInit
|
** Dispatch store nuxtServerInit
|
||||||
*/
|
*/
|
||||||
if (store._actions && store._actions.nuxtServerInit) {
|
if (store._actions && store._actions.nuxtServerInit) {
|
||||||
try {
|
try {
|
||||||
await store.dispatch('nuxtServerInit', app.context)
|
await store.dispatch('nuxtServerInit', app.context)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.debug('Error occurred when calling nuxtServerInit: ', err.message)<%= isTest ? '// eslint-disable-line no-console' : '' %>
|
console.debug('Error occurred when calling nuxtServerInit: ', err.message) <%= isTest ? '// eslint-disable-line no-console' : '' %>
|
||||||
throw err
|
throw err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ...If there is a redirect or an error, stop the process
|
||||||
|
if (ssrContext.redirected) {
|
||||||
|
return noopApp()
|
||||||
|
}
|
||||||
|
if (ssrContext.nuxt.error) {
|
||||||
|
return renderErrorPage()
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// ...If there is a redirect or an error, stop the process
|
|
||||||
if (ssrContext.redirected) {
|
|
||||||
return noopApp()
|
|
||||||
}
|
|
||||||
if (ssrContext.nuxt.error) {
|
|
||||||
return renderErrorPage()
|
|
||||||
}
|
|
||||||
<% } %>
|
<% } %>
|
||||||
|
|
||||||
<% if (features.middleware) { %>
|
<% if (features.middleware) { %>
|
||||||
|
@ -194,15 +195,15 @@ export default async (ssrContext) => {
|
||||||
** Call global middleware (nuxt.config.js)
|
** Call global middleware (nuxt.config.js)
|
||||||
*/
|
*/
|
||||||
let midd = <%= serialize(router.middleware).replace('middleware(', 'function(') %><%= isTest ? '// eslint-disable-line' : '' %>
|
let midd = <%= serialize(router.middleware).replace('middleware(', 'function(') %><%= isTest ? '// eslint-disable-line' : '' %>
|
||||||
midd = midd.map((name) => {
|
midd = midd.map((name) => {
|
||||||
if (typeof name === 'function') {
|
if (typeof name === 'function') {
|
||||||
return name
|
return name
|
||||||
}
|
}
|
||||||
if (typeof middleware[name] !== 'function') {
|
if (typeof middleware[name] !== 'function') {
|
||||||
app.context.error({ statusCode: 500, message: 'Unknown middleware ' + name })
|
app.context.error({ statusCode: 500, message: 'Unknown middleware ' + name })
|
||||||
}
|
}
|
||||||
return middleware[name]
|
return middleware[name]
|
||||||
})
|
})
|
||||||
await middlewareSeries(midd, app.context)
|
await middlewareSeries(midd, app.context)
|
||||||
// ...If there is a redirect or an error, stop the process
|
// ...If there is a redirect or an error, stop the process
|
||||||
if (ssrContext.redirected) {
|
if (ssrContext.redirected) {
|
||||||
|
@ -217,7 +218,7 @@ export default async (ssrContext) => {
|
||||||
// Record store mutations for full-static after nuxtServerInit and Middleware
|
// Record store mutations for full-static after nuxtServerInit and Middleware
|
||||||
ssrContext.nuxt.mutations =[]
|
ssrContext.nuxt.mutations =[]
|
||||||
ssrContext.unsetMutationObserver = store.subscribe(m => { ssrContext.nuxt.mutations.push([m.type, m.payload]) })
|
ssrContext.unsetMutationObserver = store.subscribe(m => { ssrContext.nuxt.mutations.push([m.type, m.payload]) })
|
||||||
<% } %>
|
<% } %>
|
||||||
|
|
||||||
<% if (features.layouts) { %>
|
<% if (features.layouts) { %>
|
||||||
/*
|
/*
|
||||||
|
@ -233,24 +234,24 @@ export default async (ssrContext) => {
|
||||||
}
|
}
|
||||||
layout = _app.setLayout(layout)
|
layout = _app.setLayout(layout)
|
||||||
ssrContext.nuxt.layout = _app.layoutName
|
ssrContext.nuxt.layout = _app.layoutName
|
||||||
<% } %>
|
<% } %>
|
||||||
|
|
||||||
<% if (features.middleware) { %>
|
<% if (features.middleware) { %>
|
||||||
/*
|
/*
|
||||||
** Call middleware (layout + pages)
|
** Call middleware (layout + pages)
|
||||||
*/
|
*/
|
||||||
midd = []
|
midd =[]
|
||||||
<% if (features.layouts) { %>
|
<% if (features.layouts) { %>
|
||||||
layout = sanitizeComponent(layout)
|
layout = sanitizeComponent(layout)
|
||||||
if (layout.options.middleware) {
|
if (layout.options.middleware) {
|
||||||
midd = midd.concat(layout.options.middleware)
|
midd = midd.concat(layout.options.middleware)
|
||||||
}
|
}
|
||||||
<% } %>
|
<% } %>
|
||||||
Components.forEach((Component) => {
|
Components.forEach((Component) => {
|
||||||
if (Component.options.middleware) {
|
if (Component.options.middleware) {
|
||||||
midd = midd.concat(Component.options.middleware)
|
midd = midd.concat(Component.options.middleware)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
midd = midd.map((name) => {
|
midd = midd.map((name) => {
|
||||||
if (typeof name === 'function') {
|
if (typeof name === 'function') {
|
||||||
return name
|
return name
|
||||||
|
@ -305,27 +306,27 @@ export default async (ssrContext) => {
|
||||||
|
|
||||||
// If no Components found, returns 404
|
// If no Components found, returns 404
|
||||||
if (!Components.length) {
|
if (!Components.length) {
|
||||||
return render404Page()
|
return render404Page()
|
||||||
}
|
}
|
||||||
|
|
||||||
<% if (features.asyncData || features.fetch) { %>
|
<% if (features.asyncData || features.fetch) { %>
|
||||||
// Call asyncData & fetch hooks on components matched by the route.
|
// Call asyncData & fetch hooks on components matched by the route.
|
||||||
const asyncDatas = await Promise.all(Components.map((Component) => {
|
const asyncDatas = await Promise.all(Components.map((Component) => {
|
||||||
const promises = []
|
const promises = []
|
||||||
|
|
||||||
<% if (features.asyncData) { %>
|
<% if (features.asyncData) { %>
|
||||||
// Call asyncData(context)
|
// Call asyncData(context)
|
||||||
if (Component.options.asyncData && typeof Component.options.asyncData === 'function') {
|
if (Component.options.asyncData && typeof Component.options.asyncData === 'function') {
|
||||||
const promise = promisify(Component.options.asyncData, app.context)
|
const promise = promisify(Component.options.asyncData, app.context)
|
||||||
promise.then((asyncDataResult) => {
|
promise.then((asyncDataResult) => {
|
||||||
ssrContext.asyncData[Component.cid] = asyncDataResult
|
ssrContext.asyncData[Component.cid] = asyncDataResult
|
||||||
applyAsyncData(Component)
|
applyAsyncData(Component)
|
||||||
return asyncDataResult
|
return asyncDataResult
|
||||||
})
|
})
|
||||||
promises.push(promise)
|
promises.push(promise)
|
||||||
} else {
|
} else {
|
||||||
promises.push(null)
|
promises.push(null)
|
||||||
}
|
}
|
||||||
<% } %>
|
<% } %>
|
||||||
|
|
||||||
<% if (features.fetch) { %>
|
<% if (features.fetch) { %>
|
||||||
|
@ -338,24 +339,24 @@ export default async (ssrContext) => {
|
||||||
<% } %>
|
<% } %>
|
||||||
|
|
||||||
return Promise.all(promises)
|
return Promise.all(promises)
|
||||||
}))
|
}))
|
||||||
|
|
||||||
<% if (debug) { %>if (process.env.DEBUG && asyncDatas.length) console.debug('Data fetching ' + ssrContext.url + ': ' + (Date.now() - s) + 'ms')<% } %>
|
<% if (debug) { %>if (process.env.DEBUG && asyncDatas.length) console.debug('Data fetching ' + ssrContext.url + ': ' + (Date.now() - s) + 'ms') <% } %>
|
||||||
|
|
||||||
// datas are the first row of each
|
// datas are the first row of each
|
||||||
ssrContext.nuxt.data = asyncDatas.map(r => r[0] || {})
|
ssrContext.nuxt.data = asyncDatas.map(r => r[0] || {})
|
||||||
<% } %>
|
<% } %>
|
||||||
|
|
||||||
// ...If there is a redirect or an error, stop the process
|
// ...If there is a redirect or an error, stop the process
|
||||||
if (ssrContext.redirected) {
|
if (ssrContext.redirected) {
|
||||||
return noopApp()
|
return noopApp()
|
||||||
}
|
}
|
||||||
if (ssrContext.nuxt.error) {
|
if (ssrContext.nuxt.error) {
|
||||||
return renderErrorPage()
|
return renderErrorPage()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Call beforeNuxtRender methods & add store state
|
// Call beforeNuxtRender methods & add store state
|
||||||
await beforeRender()
|
await beforeRender()
|
||||||
|
|
||||||
return _app
|
return _app
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,11 +11,11 @@
|
||||||
"@nuxt/devalue": "^2.0.0",
|
"@nuxt/devalue": "^2.0.0",
|
||||||
"@nuxt/utils": "2.15.6",
|
"@nuxt/utils": "2.15.6",
|
||||||
"consola": "^2.15.3",
|
"consola": "^2.15.3",
|
||||||
"defu": "^5.0.0",
|
"defu": "^6.0.0",
|
||||||
"fs-extra": "^10.0.0",
|
"fs-extra": "^10.1.0",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"lru-cache": "^5.1.1",
|
"lru-cache": "^5.1.1",
|
||||||
"ufo": "^0.7.9",
|
"ufo": "^0.8.4",
|
||||||
"vue": "^2.6.14",
|
"vue": "^2.6.14",
|
||||||
"vue-meta": "^2.4.0",
|
"vue-meta": "^2.4.0",
|
||||||
"vue-server-renderer": "^2.6.14"
|
"vue-server-renderer": "^2.6.14"
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
export default {
|
export default {
|
||||||
build: true,
|
build: true,
|
||||||
|
externals: [
|
||||||
|
'webpack/lib/util/objectToMap'
|
||||||
|
],
|
||||||
ignoreUnused: [
|
ignoreUnused: [
|
||||||
'@nuxt/babel-preset-app',
|
'@nuxt/babel-preset-app',
|
||||||
'@babel/core', // peerDependency of babel-loader
|
'@babel/core', // peerDependency of babel-loader
|
||||||
|
|
|
@ -8,20 +8,20 @@
|
||||||
"dist"
|
"dist"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/core": "^7.16.0",
|
"@babel/core": "^7.18.5",
|
||||||
"@nuxt/babel-preset-app": "2.15.6",
|
"@nuxt/babel-preset-app": "2.15.6",
|
||||||
"@nuxt/friendly-errors-webpack-plugin": "^2.5.2",
|
"@nuxt/friendly-errors-webpack-plugin": "^2.5.2",
|
||||||
"@nuxt/utils": "2.15.6",
|
"@nuxt/utils": "2.15.6",
|
||||||
"babel-loader": "^8.2.3",
|
"babel-loader": "^8.2.5",
|
||||||
"cache-loader": "^4.1.0",
|
"cache-loader": "^4.1.0",
|
||||||
"caniuse-lite": "^1.0.30001275",
|
"caniuse-lite": "^1.0.30001358",
|
||||||
"consola": "^2.15.3",
|
"consola": "^2.15.3",
|
||||||
"css-loader": "^4.3.0",
|
"css-loader": "^4.3.0",
|
||||||
"cssnano": "^4.1.11",
|
"cssnano": "^4.1.11",
|
||||||
"eventsource-polyfill": "^0.9.6",
|
"eventsource-polyfill": "^0.9.6",
|
||||||
"extract-css-chunks-webpack-plugin": "^4.9.0",
|
"extract-css-chunks-webpack-plugin": "^4.9.0",
|
||||||
"file-loader": "^6.2.0",
|
"file-loader": "^6.2.0",
|
||||||
"glob": "^7.2.0",
|
"glob": "^7.2.3",
|
||||||
"hard-source-webpack-plugin": "^0.13.1",
|
"hard-source-webpack-plugin": "^0.13.1",
|
||||||
"hash-sum": "^2.0.0",
|
"hash-sum": "^2.0.0",
|
||||||
"html-webpack-plugin": "^4.5.1",
|
"html-webpack-plugin": "^4.5.1",
|
||||||
|
@ -34,23 +34,23 @@
|
||||||
"postcss-import": "^12.0.1",
|
"postcss-import": "^12.0.1",
|
||||||
"postcss-import-resolver": "^2.0.0",
|
"postcss-import-resolver": "^2.0.0",
|
||||||
"postcss-loader": "^3.0.0",
|
"postcss-loader": "^3.0.0",
|
||||||
"postcss-preset-env": "^6.7.0",
|
"postcss-preset-env": "^6.7.1",
|
||||||
"postcss-url": "^8.0.0",
|
"postcss-url": "^8.0.0",
|
||||||
"semver": "^7.3.5",
|
"semver": "^7.3.7",
|
||||||
"std-env": "^3.0.1",
|
"std-env": "^3.1.1",
|
||||||
"style-resources-loader": "^1.4.1",
|
"style-resources-loader": "^1.5.0",
|
||||||
"terser-webpack-plugin": "^4.2.3",
|
"terser-webpack-plugin": "^4.2.3",
|
||||||
"thread-loader": "^3.0.4",
|
"thread-loader": "^3.0.4",
|
||||||
"time-fix-plugin": "^2.0.7",
|
"time-fix-plugin": "^2.0.7",
|
||||||
"ufo": "^0.7.9",
|
"ufo": "^0.8.4",
|
||||||
"url-loader": "^4.1.1",
|
"url-loader": "^4.1.1",
|
||||||
"vue-loader": "^15.9.8",
|
"vue-loader": "^15.9.8",
|
||||||
"vue-style-loader": "^4.1.3",
|
"vue-style-loader": "^4.1.3",
|
||||||
"vue-template-compiler": "^2.6.14",
|
"vue-template-compiler": "^2.6.14",
|
||||||
"watchpack": "^2.2.0",
|
"watchpack": "^2.4.0",
|
||||||
"webpack": "^4.46.0",
|
"webpack": "^4.46.0",
|
||||||
"webpack-bundle-analyzer": "^4.5.0",
|
"webpack-bundle-analyzer": "^4.5.0",
|
||||||
"webpack-dev-middleware": "^5.2.1",
|
"webpack-dev-middleware": "^5.3.3",
|
||||||
"webpack-hot-middleware": "^2.25.1",
|
"webpack-hot-middleware": "^2.25.1",
|
||||||
"webpack-node-externals": "^3.0.0",
|
"webpack-node-externals": "^3.0.0",
|
||||||
"webpackbar": "^5.0.2"
|
"webpackbar": "^5.0.2"
|
||||||
|
|
|
@ -14,15 +14,17 @@
|
||||||
"css-loader",
|
"css-loader",
|
||||||
"sass-loader",
|
"sass-loader",
|
||||||
"npm",
|
"npm",
|
||||||
|
"boxen",
|
||||||
"html-webpack-plugin",
|
"html-webpack-plugin",
|
||||||
"terser-webpack-plugin",
|
"terser-webpack-plugin",
|
||||||
"@types/webpack-dev-middleware",
|
|
||||||
"@types/terser-webpack-plugin",
|
"@types/terser-webpack-plugin",
|
||||||
"@types/webpack-bundle-analyzer",
|
"@types/webpack-bundle-analyzer",
|
||||||
"wrap-ansi",
|
"wrap-ansi",
|
||||||
"jest",
|
"jest",
|
||||||
"babel-jest",
|
"babel-jest",
|
||||||
"globby"
|
"globby",
|
||||||
|
"execa",
|
||||||
|
"chalk"
|
||||||
],
|
],
|
||||||
"lockFileMaintenance": {
|
"lockFileMaintenance": {
|
||||||
"enabled": true
|
"enabled": true
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import fetch from 'node-fetch'
|
import fetch from 'node-fetch-native'
|
||||||
import { getPort, loadFixture, Nuxt, rp } from '../utils'
|
import { getPort, loadFixture, Nuxt, rp } from '../utils'
|
||||||
|
|
||||||
let port
|
let port
|
||||||
|
|
|
@ -22,7 +22,7 @@ describe('error', () => {
|
||||||
|
|
||||||
test('/ should display an error', async () => {
|
test('/ should display an error', async () => {
|
||||||
await expect(nuxt.server.renderRoute('/error')).rejects.toMatchObject({
|
await expect(nuxt.server.renderRoute('/error')).rejects.toMatchObject({
|
||||||
message: expect.stringContaining('not_defined is not defined')
|
message: expect.stringContaining('notDefined is not defined')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -58,9 +58,11 @@ describe('error', () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('/info should display an error', async () => {
|
test('/info should display an error', async () => {
|
||||||
await expect(nuxt.server.renderRoute('/info')).rejects.toMatchObject({
|
const promise = nuxt.server.renderRoute('/info')
|
||||||
message: expect.stringContaining('Cannot read property \'title\' of undefined')
|
await expect(promise).rejects
|
||||||
})
|
const message = await promise.catch(e => e.message)
|
||||||
|
expect(message).toContain('Cannot read proper')
|
||||||
|
expect(message).toContain('title')
|
||||||
})
|
})
|
||||||
|
|
||||||
test('/about should work', async () => {
|
test('/about should work', async () => {
|
||||||
|
@ -70,9 +72,11 @@ describe('error', () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('/error-square should display an error', async () => {
|
test('/error-square should display an error', async () => {
|
||||||
await expect(nuxt.server.renderRoute('/squared')).rejects.toMatchObject({
|
const promise = nuxt.server.renderRoute('/squared')
|
||||||
message: expect.stringContaining('Cannot read property \'data\' of undefined')
|
await expect(promise).rejects
|
||||||
})
|
const message = await promise.catch(e => e.message)
|
||||||
|
expect(message).toContain('Cannot read proper')
|
||||||
|
expect(message).toContain('data')
|
||||||
})
|
})
|
||||||
|
|
||||||
// Close server and ask nuxt to stop listening to file changes
|
// Close server and ask nuxt to stop listening to file changes
|
||||||
|
|
|
@ -23,7 +23,7 @@ describe('extract css', () => {
|
||||||
const scopeCss = /^h1\[data-v-[a-zA-Z0-9]{8}\]\{color:red\}\.container\[data-v-[a-zA-Z0-9]{8}\]/
|
const scopeCss = /^h1\[data-v-[a-zA-Z0-9]{8}\]\{color:red\}\.container\[data-v-[a-zA-Z0-9]{8}\]/
|
||||||
expect(content).toMatch(scopeCss)
|
expect(content).toMatch(scopeCss)
|
||||||
|
|
||||||
const containerStyle = '{display:-ms-grid;display:grid;-ms-grid-columns:60px 60px 60px 60px 60px;grid-template-columns:60px 60px 60px 60px 60px;-ms-grid-rows:30px 30px;grid-template-rows:30px 30px;grid-auto-flow:row}'
|
const containerStyle = '{display:grid;grid-template-columns:60px 60px 60px 60px 60px;grid-template-rows:30px 30px;grid-auto-flow:row}'
|
||||||
expect(content).toContain(containerStyle)
|
expect(content).toContain(containerStyle)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,6 @@
|
||||||
<script>
|
<script>
|
||||||
/* eslint no-undef: 0 */
|
/* eslint no-undef: 0 */
|
||||||
export default {
|
export default {
|
||||||
not_defined
|
notDefined
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
Loading…
Reference in New Issue