mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-23 14:15:13 +00:00
v2.6.0 (#5352)
This commit is contained in:
commit
f00a675f03
39
CHANGELOG.md
39
CHANGELOG.md
@ -3,6 +3,45 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
# [2.6.0](https://github.com/nuxt/nuxt.js/compare/v2.5.1...v2.6.0) (2019-04-04)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* revert node-externals disabling in dev mode ([#5452](https://github.com/nuxt/nuxt.js/issues/5452)) ([6ce99d2](https://github.com/nuxt/nuxt.js/commit/6ce99d2))
|
||||||
|
* **webpack:** prefer `main` over `module` field for server config ([#5446](https://github.com/nuxt/nuxt.js/issues/5446)) ([e155ea4](https://github.com/nuxt/nuxt.js/commit/e155ea4))
|
||||||
|
* disable `node-externals` for dev mode ([#5414](https://github.com/nuxt/nuxt.js/issues/5414)) ([a5a1657](https://github.com/nuxt/nuxt.js/commit/a5a1657))
|
||||||
|
* not override externals set by build.extend ([#5444](https://github.com/nuxt/nuxt.js/issues/5444)) ([1ae4333](https://github.com/nuxt/nuxt.js/commit/1ae4333))
|
||||||
|
* **build:** disable loading `babel.config.js` by default ([#5365](https://github.com/nuxt/nuxt.js/issues/5365)) ([64fa424](https://github.com/nuxt/nuxt.js/commit/64fa424))
|
||||||
|
* **builder:** await for renderer to load resources ([#5341](https://github.com/nuxt/nuxt.js/issues/5341)) ([caf5198](https://github.com/nuxt/nuxt.js/commit/caf5198))
|
||||||
|
* **cli:** catch all possible errors thrown from proper-filelock ([#5347](https://github.com/nuxt/nuxt.js/issues/5347)) ([39bbe46](https://github.com/nuxt/nuxt.js/commit/39bbe46))
|
||||||
|
* **renderer:** retry render if renderer is in loading or created state ([#5417](https://github.com/nuxt/nuxt.js/issues/5417)) ([8b99695](https://github.com/nuxt/nuxt.js/commit/8b99695))
|
||||||
|
* **vue-app:** prevent mounting page twice on redirect ([#5361](https://github.com/nuxt/nuxt.js/issues/5361)) ([2d73e8a](https://github.com/nuxt/nuxt.js/commit/2d73e8a))
|
||||||
|
* **vue-renderer:** add the csp hash if `unsafe-inline` hasn't been specified ([#5387](https://github.com/nuxt/nuxt.js/issues/5387)) ([97db6a4](https://github.com/nuxt/nuxt.js/commit/97db6a4))
|
||||||
|
* add type definition for configuring forkTsChecker ([2c1444d](https://github.com/nuxt/nuxt.js/commit/2c1444d))
|
||||||
|
* fail in case of missing core-js dependency ([#5342](https://github.com/nuxt/nuxt.js/issues/5342)) ([439b914](https://github.com/nuxt/nuxt.js/commit/439b914))
|
||||||
|
* memory leak in dev mode ([#5399](https://github.com/nuxt/nuxt.js/issues/5399)) ([04ddcac](https://github.com/nuxt/nuxt.js/commit/04ddcac))
|
||||||
|
* SyntaxError Unexpected token export in importing babel runtime helper ([#5401](https://github.com/nuxt/nuxt.js/issues/5401)) ([3b85dd9](https://github.com/nuxt/nuxt.js/commit/3b85dd9))
|
||||||
|
* **vue-app:** decode uri in `getlocation` ([#5337](https://github.com/nuxt/nuxt.js/issues/5337)) ([77dcfe6](https://github.com/nuxt/nuxt.js/commit/77dcfe6))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **babel-preset-app:** support specifying core-js version ([#5411](https://github.com/nuxt/nuxt.js/issues/5411)) ([159123f](https://github.com/nuxt/nuxt.js/commit/159123f))
|
||||||
|
* **cli:** add `--quiet` option to nuxt generate command ([#5357](https://github.com/nuxt/nuxt.js/issues/5357)) ([91f4eb0](https://github.com/nuxt/nuxt.js/commit/91f4eb0))
|
||||||
|
* **cli:** add internal _generate and _build options ([#5434](https://github.com/nuxt/nuxt.js/issues/5434)) ([516aea3](https://github.com/nuxt/nuxt.js/commit/516aea3))
|
||||||
|
* **typescript:** detect typescript based on `tsconfig.json` ([#5412](https://github.com/nuxt/nuxt.js/issues/5412)) ([6ffc5c5](https://github.com/nuxt/nuxt.js/commit/6ffc5c5))
|
||||||
|
* **vue-renderer:** add csp meta tags ([#5354](https://github.com/nuxt/nuxt.js/issues/5354)) ([b978a37](https://github.com/nuxt/nuxt.js/commit/b978a37))
|
||||||
|
|
||||||
|
|
||||||
|
### Reverts
|
||||||
|
|
||||||
|
* **core:** call ready to prevent breaking changes ([#5413](https://github.com/nuxt/nuxt.js/issues/5413)) ([001ba77](https://github.com/nuxt/nuxt.js/commit/001ba77))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
||||||
|
|
||||||
|
|
||||||
|
@ -100,10 +100,10 @@ Or you can start by using one of our starter templates:
|
|||||||
const { Nuxt, Builder } = require('nuxt')
|
const { Nuxt, Builder } = require('nuxt')
|
||||||
|
|
||||||
// Import and set nuxt.js options
|
// Import and set nuxt.js options
|
||||||
let config = require('./nuxt.config.js')
|
const config = require('./nuxt.config.js')
|
||||||
config.dev = (process.env.NODE_ENV !== 'production')
|
config.dev = (process.env.NODE_ENV !== 'production')
|
||||||
|
|
||||||
let nuxt = new Nuxt(config)
|
const nuxt = new Nuxt(config)
|
||||||
|
|
||||||
// Start build process (only in development)
|
// Start build process (only in development)
|
||||||
if (config.dev) {
|
if (config.dev) {
|
||||||
@ -117,7 +117,7 @@ Learn more: https://nuxtjs.org/api/nuxt
|
|||||||
|
|
||||||
## Using nuxt.js as a middleware
|
## Using nuxt.js as a middleware
|
||||||
|
|
||||||
You might want to use your own server with your configurations, your API and everything awesome your created with. That's why you can use nuxt.js as a middleware. It's recommended to use it at the end of your middleware since it will handle the rendering of your web application and won't call next().
|
You might want to use your own server with your configurations, your API and everything awesome you have created with. That's why you can use nuxt.js as a middleware. It's recommended to use it at the end of your middleware since it will handle the rendering of your web application and won't call next().
|
||||||
|
|
||||||
```js
|
```js
|
||||||
app.use(nuxt.render)
|
app.use(nuxt.render)
|
||||||
|
@ -3,6 +3,14 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
# [2.6.0](https://github.com/nuxt/nuxt.js/compare/v2.5.1...v2.6.0) (2019-04-04)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package nuxt-start
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
||||||
|
|
||||||
**Note:** Version bump only for package nuxt-start
|
**Note:** Version bump only for package nuxt-start
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "nuxt-start",
|
"name": "nuxt-start",
|
||||||
"version": "2.5.1",
|
"version": "2.6.0",
|
||||||
"description": "Starts Nuxt.js Application in production mode",
|
"description": "Starts Nuxt.js Application in production mode",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"nuxt",
|
"nuxt",
|
||||||
@ -52,11 +52,11 @@
|
|||||||
"main": "dist/nuxt-start.js",
|
"main": "dist/nuxt-start.js",
|
||||||
"bin": "bin/nuxt-start.js",
|
"bin": "bin/nuxt-start.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxt/cli": "2.5.1",
|
"@nuxt/cli": "2.6.0",
|
||||||
"@nuxt/core": "2.5.1",
|
"@nuxt/core": "2.6.0",
|
||||||
"node-fetch": "^2.3.0",
|
"node-fetch": "^2.3.0",
|
||||||
"vue": "^2.6.10",
|
"vue": "^2.6.10",
|
||||||
"vue-meta": "^1.5.8",
|
"vue-meta": "^1.6.0",
|
||||||
"vue-no-ssr": "^1.1.1",
|
"vue-no-ssr": "^1.1.1",
|
||||||
"vue-router": "^3.0.2",
|
"vue-router": "^3.0.2",
|
||||||
"vuex": "^3.1.0"
|
"vuex": "^3.1.0"
|
||||||
|
@ -3,6 +3,14 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
# [2.6.0](https://github.com/nuxt/nuxt.js/compare/v2.5.1...v2.6.0) (2019-04-04)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package nuxt-ts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
||||||
|
|
||||||
**Note:** Version bump only for package nuxt-ts
|
**Note:** Version bump only for package nuxt-ts
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "nuxt-ts",
|
"name": "nuxt-ts",
|
||||||
"version": "2.5.1",
|
"version": "2.6.0",
|
||||||
"description": "Nuxt With Runtime Typescript Support",
|
"description": "Nuxt With Runtime Typescript Support",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"nuxt",
|
"nuxt",
|
||||||
@ -56,14 +56,14 @@
|
|||||||
"nuxts": "bin/nuxt-ts.js"
|
"nuxts": "bin/nuxt-ts.js"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxt/builder": "2.5.1",
|
"@nuxt/builder": "2.6.0",
|
||||||
"@nuxt/cli": "2.5.1",
|
"@nuxt/cli": "2.6.0",
|
||||||
"@nuxt/core": "2.5.1",
|
"@nuxt/core": "2.6.0",
|
||||||
"@nuxt/generator": "2.5.1",
|
"@nuxt/generator": "2.6.0",
|
||||||
"@nuxt/loading-screen": "^0.1.2",
|
"@nuxt/loading-screen": "^0.2.0",
|
||||||
"@nuxt/opencollective": "^0.2.1",
|
"@nuxt/opencollective": "^0.2.2",
|
||||||
"@nuxt/typescript": "2.5.1",
|
"@nuxt/typescript": "2.6.0",
|
||||||
"@nuxt/webpack": "2.5.1"
|
"@nuxt/webpack": "2.6.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6.0.0",
|
"node": ">=6.0.0",
|
||||||
|
@ -3,6 +3,14 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
# [2.6.0](https://github.com/nuxt/nuxt.js/compare/v2.5.1...v2.6.0) (2019-04-04)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package nuxt
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
||||||
|
|
||||||
**Note:** Version bump only for package nuxt
|
**Note:** Version bump only for package nuxt
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "nuxt",
|
"name": "nuxt",
|
||||||
"version": "2.5.1",
|
"version": "2.6.0",
|
||||||
"description": "A minimalistic framework for server-rendered Vue.js applications (inspired by Next.js)",
|
"description": "A minimalistic framework for server-rendered Vue.js applications (inspired by Next.js)",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"nuxt",
|
"nuxt",
|
||||||
@ -54,13 +54,13 @@
|
|||||||
"postinstall": "opencollective || exit 0"
|
"postinstall": "opencollective || exit 0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxt/builder": "2.5.1",
|
"@nuxt/builder": "2.6.0",
|
||||||
"@nuxt/cli": "2.5.1",
|
"@nuxt/cli": "2.6.0",
|
||||||
"@nuxt/core": "2.5.1",
|
"@nuxt/core": "2.6.0",
|
||||||
"@nuxt/generator": "2.5.1",
|
"@nuxt/generator": "2.6.0",
|
||||||
"@nuxt/loading-screen": "^0.1.2",
|
"@nuxt/loading-screen": "^0.2.0",
|
||||||
"@nuxt/opencollective": "^0.2.1",
|
"@nuxt/opencollective": "^0.2.2",
|
||||||
"@nuxt/webpack": "2.5.1"
|
"@nuxt/webpack": "2.6.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=8.0.0",
|
"node": ">=8.0.0",
|
||||||
|
84
examples/docker-build/.dockerignore
Normal file
84
examples/docker-build/.dockerignore
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
# Created by .ignore support plugin (hsz.mobi)
|
||||||
|
### Node template
|
||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
|
||||||
|
# Runtime data
|
||||||
|
pids
|
||||||
|
*.pid
|
||||||
|
*.seed
|
||||||
|
*.pid.lock
|
||||||
|
|
||||||
|
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||||
|
lib-cov
|
||||||
|
|
||||||
|
# Coverage directory used by tools like istanbul
|
||||||
|
coverage
|
||||||
|
|
||||||
|
# nyc test coverage
|
||||||
|
.nyc_output
|
||||||
|
|
||||||
|
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
|
||||||
|
.grunt
|
||||||
|
|
||||||
|
# Bower dependency directory (https://bower.io/)
|
||||||
|
bower_components
|
||||||
|
|
||||||
|
# node-waf configuration
|
||||||
|
.lock-wscript
|
||||||
|
|
||||||
|
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||||
|
build/Release
|
||||||
|
|
||||||
|
# Dependency directories
|
||||||
|
node_modules/
|
||||||
|
jspm_packages/
|
||||||
|
|
||||||
|
# TypeScript v1 declaration files
|
||||||
|
typings/
|
||||||
|
|
||||||
|
# Optional npm cache directory
|
||||||
|
.npm
|
||||||
|
|
||||||
|
# Optional eslint cache
|
||||||
|
.eslintcache
|
||||||
|
|
||||||
|
# Optional REPL history
|
||||||
|
.node_repl_history
|
||||||
|
|
||||||
|
# Output of 'npm pack'
|
||||||
|
*.tgz
|
||||||
|
|
||||||
|
# Yarn Integrity file
|
||||||
|
.yarn-integrity
|
||||||
|
|
||||||
|
# dotenv environment variables file
|
||||||
|
.env
|
||||||
|
|
||||||
|
# parcel-bundler cache (https://parceljs.org/)
|
||||||
|
.cache
|
||||||
|
|
||||||
|
# next.js build output
|
||||||
|
.next
|
||||||
|
|
||||||
|
# nuxt.js build output
|
||||||
|
.nuxt
|
||||||
|
|
||||||
|
# Nuxt generate
|
||||||
|
dist
|
||||||
|
|
||||||
|
# vuepress build output
|
||||||
|
.vuepress/dist
|
||||||
|
|
||||||
|
# Serverless directories
|
||||||
|
.serverless
|
||||||
|
|
||||||
|
# IDE
|
||||||
|
.idea
|
||||||
|
|
||||||
|
# Service worker
|
||||||
|
sw.*
|
5
examples/docker-build/.yarnclean
Normal file
5
examples/docker-build/.yarnclean
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
*.yaml
|
||||||
|
*.md
|
||||||
|
*.lock
|
||||||
|
LICENSE
|
||||||
|
CHANGELOG
|
12
examples/docker-build/README.md
Normal file
12
examples/docker-build/README.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# docker-build
|
||||||
|
|
||||||
|
## Build Setup
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build a nuxt-docker image
|
||||||
|
$ docker build -t nuxt-docker .
|
||||||
|
|
||||||
|
# Run the container for the nuxt-docker image with a exposed port 3000
|
||||||
|
$ docker run --rm -it -p 3000:3000 nuxt-docker
|
||||||
|
|
||||||
|
```
|
1
examples/docker-build/assets/README.md
Normal file
1
examples/docker-build/assets/README.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# ASSETS
|
1
examples/docker-build/components/README.md
Normal file
1
examples/docker-build/components/README.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# COMPONENTS
|
31
examples/docker-build/dockerfile
Normal file
31
examples/docker-build/dockerfile
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
FROM node:latest as builder
|
||||||
|
|
||||||
|
WORKDIR /src
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
RUN yarn install \
|
||||||
|
--prefer-offline \
|
||||||
|
--frozen-lockfile \
|
||||||
|
--non-interactive \
|
||||||
|
--production=false
|
||||||
|
|
||||||
|
RUN yarn build
|
||||||
|
|
||||||
|
RUN rm -rf node_modules && \
|
||||||
|
NODE_ENV=production yarn install \
|
||||||
|
--prefer-offline \
|
||||||
|
--pure-lockfile \
|
||||||
|
--non-interactive \
|
||||||
|
--production=true
|
||||||
|
|
||||||
|
FROM node:alpine
|
||||||
|
|
||||||
|
WORKDIR /src
|
||||||
|
|
||||||
|
COPY --from=builder /src .
|
||||||
|
|
||||||
|
ENV HOST 0.0.0.0
|
||||||
|
EXPOSE 3000
|
||||||
|
|
||||||
|
CMD [ "yarn", "start" ]
|
1
examples/docker-build/layouts/README.md
Normal file
1
examples/docker-build/layouts/README.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# LAYOUTS
|
8
examples/docker-build/layouts/default.vue
Normal file
8
examples/docker-build/layouts/default.vue
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<nuxt />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
</style>
|
1
examples/docker-build/middleware/README.md
Normal file
1
examples/docker-build/middleware/README.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# MIDDLEWARE
|
54
examples/docker-build/nuxt.config.js
Normal file
54
examples/docker-build/nuxt.config.js
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
import pkg from './package'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
mode: 'universal',
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Headers of the page
|
||||||
|
*/
|
||||||
|
head: {
|
||||||
|
title: pkg.name,
|
||||||
|
meta: [
|
||||||
|
{ charset: 'utf-8' },
|
||||||
|
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
|
||||||
|
{ hid: 'description', name: 'description', content: pkg.description }
|
||||||
|
],
|
||||||
|
link: [
|
||||||
|
{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Customize the progress-bar color
|
||||||
|
*/
|
||||||
|
loading: { color: '#fff' },
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Global CSS
|
||||||
|
*/
|
||||||
|
css: [
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Plugins to load before mounting the App
|
||||||
|
*/
|
||||||
|
plugins: [
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Nuxt.js modules
|
||||||
|
*/
|
||||||
|
modules: [
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Build configuration
|
||||||
|
*/
|
||||||
|
build: {
|
||||||
|
/*
|
||||||
|
** You can extend webpack config here
|
||||||
|
*/
|
||||||
|
extend(config, ctx) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
16
examples/docker-build/package.json
Normal file
16
examples/docker-build/package.json
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"name": "docker-build",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "nuxt",
|
||||||
|
"build": "nuxt build",
|
||||||
|
"start": "nuxt-start",
|
||||||
|
"generate": "nuxt generate"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"cross-env": "latest",
|
||||||
|
"nuxt-start": "latest"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"nuxt": "latest"
|
||||||
|
}
|
||||||
|
}
|
1
examples/docker-build/pages/README.md
Normal file
1
examples/docker-build/pages/README.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# PAGES
|
12
examples/docker-build/pages/index.vue
Normal file
12
examples/docker-build/pages/index.vue
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<h1>It works!</h1>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
</style>
|
1
examples/docker-build/plugins/README.md
Normal file
1
examples/docker-build/plugins/README.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# PLUGINS
|
1
examples/docker-build/static/README.md
Normal file
1
examples/docker-build/static/README.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# STATIC
|
BIN
examples/docker-build/static/favicon.ico
Normal file
BIN
examples/docker-build/static/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
1
examples/docker-build/store/README.md
Normal file
1
examples/docker-build/store/README.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# STORE
|
@ -6,8 +6,6 @@
|
|||||||
Data model is: {{ model }}
|
Data model is: {{ model }}
|
||||||
|
|
||||||
<NuxtLink to="/about">Goto About</NuxtLink>
|
<NuxtLink to="/about">Goto About</NuxtLink>
|
||||||
|
|
||||||
<NuxtLink to="/pug">Goto Pug</NuxtLink>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
@ -1 +1,32 @@
|
|||||||
{}
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "esnext",
|
||||||
|
"module": "esnext",
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"lib": [
|
||||||
|
"esnext",
|
||||||
|
"esnext.asynciterable",
|
||||||
|
"dom"
|
||||||
|
],
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"experimentalDecorators": true,
|
||||||
|
"allowJs": true,
|
||||||
|
"sourceMap": true,
|
||||||
|
"strict": true,
|
||||||
|
"noImplicitAny": false,
|
||||||
|
"noEmit": true,
|
||||||
|
"baseUrl": ".",
|
||||||
|
"paths": {
|
||||||
|
"~/*": [
|
||||||
|
"./*"
|
||||||
|
],
|
||||||
|
"@/*": [
|
||||||
|
"./*"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"types": [
|
||||||
|
"@types/node",
|
||||||
|
"@nuxt/vue-app"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1 +1,32 @@
|
|||||||
{}
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "esnext",
|
||||||
|
"module": "esnext",
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"lib": [
|
||||||
|
"esnext",
|
||||||
|
"esnext.asynciterable",
|
||||||
|
"dom"
|
||||||
|
],
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"experimentalDecorators": true,
|
||||||
|
"allowJs": true,
|
||||||
|
"sourceMap": true,
|
||||||
|
"strict": true,
|
||||||
|
"noImplicitAny": false,
|
||||||
|
"noEmit": true,
|
||||||
|
"baseUrl": ".",
|
||||||
|
"paths": {
|
||||||
|
"~/*": [
|
||||||
|
"./*"
|
||||||
|
],
|
||||||
|
"@/*": [
|
||||||
|
"./*"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"types": [
|
||||||
|
"@types/node",
|
||||||
|
"@nuxt/vue-app"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,6 +1,34 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
|
"target": "esnext",
|
||||||
|
"module": "esnext",
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"lib": [
|
||||||
|
"esnext",
|
||||||
|
"esnext.asynciterable",
|
||||||
|
"dom"
|
||||||
|
],
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"experimentalDecorators": true,
|
||||||
|
"allowJs": true,
|
||||||
"jsx": "preserve",
|
"jsx": "preserve",
|
||||||
"noImplicitThis": true
|
"sourceMap": true,
|
||||||
|
"strict": true,
|
||||||
|
"noImplicitAny": false,
|
||||||
|
"noImplicitThis": true,
|
||||||
|
"noEmit": true,
|
||||||
|
"baseUrl": ".",
|
||||||
|
"paths": {
|
||||||
|
"~/*": [
|
||||||
|
"./*"
|
||||||
|
],
|
||||||
|
"@/*": [
|
||||||
|
"./*"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"types": [
|
||||||
|
"@types/node",
|
||||||
|
"@nuxt/vue-app"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1 +1,32 @@
|
|||||||
{}
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "esnext",
|
||||||
|
"module": "esnext",
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"lib": [
|
||||||
|
"esnext",
|
||||||
|
"esnext.asynciterable",
|
||||||
|
"dom"
|
||||||
|
],
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"experimentalDecorators": true,
|
||||||
|
"allowJs": true,
|
||||||
|
"sourceMap": true,
|
||||||
|
"strict": true,
|
||||||
|
"noImplicitAny": false,
|
||||||
|
"noEmit": true,
|
||||||
|
"baseUrl": ".",
|
||||||
|
"paths": {
|
||||||
|
"~/*": [
|
||||||
|
"./*"
|
||||||
|
],
|
||||||
|
"@/*": [
|
||||||
|
"./*"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"types": [
|
||||||
|
"@types/node",
|
||||||
|
"@nuxt/vue-app"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1 +1,32 @@
|
|||||||
{}
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "esnext",
|
||||||
|
"module": "esnext",
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"lib": [
|
||||||
|
"esnext",
|
||||||
|
"esnext.asynciterable",
|
||||||
|
"dom"
|
||||||
|
],
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"experimentalDecorators": true,
|
||||||
|
"allowJs": true,
|
||||||
|
"sourceMap": true,
|
||||||
|
"strict": true,
|
||||||
|
"noImplicitAny": false,
|
||||||
|
"noEmit": true,
|
||||||
|
"baseUrl": ".",
|
||||||
|
"paths": {
|
||||||
|
"~/*": [
|
||||||
|
"./*"
|
||||||
|
],
|
||||||
|
"@/*": [
|
||||||
|
"./*"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"types": [
|
||||||
|
"@types/node",
|
||||||
|
"@nuxt/vue-app"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
import { createNetworkInterface } from 'apollo-client'
|
|
||||||
|
|
||||||
export default (ctx) => {
|
|
||||||
return createNetworkInterface({ uri: 'https://api.graph.cool/simple/v1/cj1dqiyvqqnmj0113yuqamkuu' })
|
|
||||||
}
|
|
@ -1,8 +1,10 @@
|
|||||||
export default {
|
export default {
|
||||||
modules: ['@nuxtjs/apollo'],
|
modules: ['@nuxtjs/apollo'],
|
||||||
apollo: {
|
apollo: {
|
||||||
networkInterfaces: {
|
clientConfigs: {
|
||||||
default: '~/apollo/network-interfaces/default.js'
|
default: {
|
||||||
|
httpEndpoint: 'https://api.graph.cool/simple/v1/cj1dqiyvqqnmj0113yuqamkuu'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "example-vue-apollo",
|
"name": "example-vue-apollo",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxtjs/apollo": "^2.1.1",
|
"@nuxtjs/apollo": "^4.0.0-rc.4",
|
||||||
|
"core-js": "^2.6.5",
|
||||||
|
"node-fetch": "^2.3.0",
|
||||||
"nuxt": "latest"
|
"nuxt": "latest"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 4.2 KiB |
42
examples/with-buefy/components/card.vue
Normal file
42
examples/with-buefy/components/card.vue
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<template>
|
||||||
|
<div class="column">
|
||||||
|
<div class="card">
|
||||||
|
<header class="card-header">
|
||||||
|
<p class="card-header-title has-text-grey">
|
||||||
|
{{ title }}
|
||||||
|
</p>
|
||||||
|
</header>
|
||||||
|
<div class="card-content">
|
||||||
|
<div class="content has-text-centered">
|
||||||
|
<b-icon
|
||||||
|
:icon="icon"
|
||||||
|
size="is-large"
|
||||||
|
type="is-primary"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer class="card-footer">
|
||||||
|
<div class="card-footer-item">
|
||||||
|
<span>
|
||||||
|
<slot />
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
icon: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
@ -3,8 +3,9 @@ export default {
|
|||||||
** Customize the progress bar color
|
** Customize the progress bar color
|
||||||
*/
|
*/
|
||||||
loading: { color: '#3B8070' },
|
loading: { color: '#3B8070' },
|
||||||
mode: 'spa',
|
modules: [
|
||||||
plugins: ['~plugins/buefy'],
|
'nuxt-buefy'
|
||||||
|
],
|
||||||
router: {
|
router: {
|
||||||
linkActiveClass: 'is-active'
|
linkActiveClass: 'is-active'
|
||||||
}
|
}
|
||||||
|
@ -10,12 +10,7 @@
|
|||||||
"post-update": "yarn upgrade --latest"
|
"post-update": "yarn upgrade --latest"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"buefy": "^0.5.4",
|
|
||||||
"nuxt": "latest",
|
"nuxt": "latest",
|
||||||
"vue": "~2.4.4"
|
"nuxt-buefy": "latest"
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"node-sass": "^4.6.0",
|
|
||||||
"sass-loader": "^6.0.6"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
<template>
|
|
||||||
<h1>About</h1>
|
|
||||||
</template>
|
|
@ -1,28 +1,43 @@
|
|||||||
<template>
|
<template>
|
||||||
<nav class="navbar has-shadow is-light">
|
<section class="section">
|
||||||
<div class="container">
|
<div class="columns is-mobile">
|
||||||
<div class="navbar-brand">
|
<card
|
||||||
<NuxtLink to="/" class="navbar-item">
|
title="Free"
|
||||||
<img src="~/assets/logo.png">
|
icon="github-circle"
|
||||||
</NuxtLink>
|
>
|
||||||
</div>
|
Open source on <a href="https://github.com/buefy/buefy"> GitHub</a>
|
||||||
<div class="navbar-menu">
|
</card>
|
||||||
<div class="navbar-start">
|
|
||||||
<NuxtLink to="/" class="navbar-item is-tab" exact>
|
<card
|
||||||
Home
|
title="Responsive"
|
||||||
</NuxtLink>
|
icon="cellphone-link"
|
||||||
<NuxtLink to="/about" class="navbar-item is-tab" exact>
|
>
|
||||||
About
|
<b class="has-text-grey">Every</b> component is responsive
|
||||||
</NuxtLink>
|
</card>
|
||||||
</div>
|
|
||||||
</div>
|
<card
|
||||||
|
title="Modern"
|
||||||
|
icon="alert-decagram"
|
||||||
|
>
|
||||||
|
Built with <a href="https://vuejs.org/">Vue.js</a> and <a href="http://bulma.io/">Bulma</a>
|
||||||
|
</card>
|
||||||
|
|
||||||
|
<card
|
||||||
|
title="Lightweight"
|
||||||
|
icon="arrange-bring-to-front"
|
||||||
|
>
|
||||||
|
No other internal dependency
|
||||||
|
</card>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</section>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss">
|
<script>
|
||||||
$primary: blue;
|
import Card from '~/components/Card'
|
||||||
$navbar-tab-active-border-bottom-color: red;
|
export default {
|
||||||
@import "~bulma";
|
name: 'HomePage',
|
||||||
@import "~buefy/src/scss/buefy";
|
components: {
|
||||||
</style>
|
Card
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
import Vue from 'vue'
|
|
||||||
import Buefy from 'buefy'
|
|
||||||
|
|
||||||
Vue.use(Buefy)
|
|
@ -3,14 +3,14 @@
|
|||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"element-ui": "^2",
|
"element-ui": "^2.6.3",
|
||||||
"nuxt": "latest",
|
"nuxt": "latest"
|
||||||
"post-update": "yarn upgrade --latest"
|
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "nuxt",
|
"dev": "nuxt",
|
||||||
"build": "nuxt build",
|
"build": "nuxt build",
|
||||||
"start": "nuxt start"
|
"start": "nuxt start",
|
||||||
|
"post-update": "yarn upgrade --latest"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"node-sass": "^4.6.0",
|
"node-sass": "^4.6.0",
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"version": "2.5.1",
|
"version": "2.6.0",
|
||||||
"npmClient": "yarn",
|
"npmClient": "yarn",
|
||||||
"useWorkspaces": true,
|
"useWorkspaces": true,
|
||||||
"conventionalCommits": true,
|
"conventionalCommits": true,
|
||||||
|
61
package.json
61
package.json
@ -1,92 +1,91 @@
|
|||||||
{
|
{
|
||||||
|
"name": "nuxt.js",
|
||||||
"private": true,
|
"private": true,
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/nuxt/nuxt.js.git"
|
||||||
|
},
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"packages/*",
|
"packages/*",
|
||||||
"distributions/*"
|
"distributions/*"
|
||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "yarn clean && yarn pkg",
|
"build": "yarn clean && yarn pkg",
|
||||||
"pkg": "node -r esm ./scripts/package",
|
|
||||||
"clean": "yarn clean:build && yarn clean:examples && yarn clean:test",
|
"clean": "yarn clean:build && yarn clean:examples && yarn clean:test",
|
||||||
"clean:build": "rimraf distributions/*/dist packages/*/dist",
|
"clean:build": "rimraf distributions/*/dist packages/*/dist",
|
||||||
"clean:examples": "rimraf examples/*/dist examples/*/.nuxt",
|
"clean:examples": "rimraf examples/*/dist examples/*/.nuxt",
|
||||||
"clean:test": "rimraf test/fixtures/*/dist test/fixtures/*/.nuxt*/",
|
"clean:test": "rimraf test/fixtures/*/dist test/fixtures/*/.nuxt*/",
|
||||||
"dev": "node -r esm ./scripts/dev.js",
|
|
||||||
"coverage": "codecov",
|
"coverage": "codecov",
|
||||||
|
"dev": "node -r esm ./scripts/dev.js",
|
||||||
|
"postinstall": "lerna link && yarn dev",
|
||||||
"lint": "eslint --ext .js,.mjs,.vue .",
|
"lint": "eslint --ext .js,.mjs,.vue .",
|
||||||
"lint:app": "eslint-multiplexer eslint --ignore-path packages/vue-app/template/.eslintignore 'test/fixtures/!(missing-plugin)/.nuxt!(-dev)/**' | eslint-multiplexer -b",
|
"lint:app": "eslint-multiplexer eslint --ignore-path packages/vue-app/template/.eslintignore 'test/fixtures/!(missing-plugin)/.nuxt!(-dev)/**' | eslint-multiplexer -b",
|
||||||
"nuxt": "node -r esm ./packages/cli/bin/nuxt-cli.js",
|
"nuxt": "node -r esm ./packages/cli/bin/nuxt-cli.js",
|
||||||
|
"pkg": "node -r esm ./scripts/package",
|
||||||
|
"release": "./scripts/release",
|
||||||
"test": "yarn test:fixtures && yarn test:unit && yarn test:types",
|
"test": "yarn test:fixtures && yarn test:unit && yarn test:types",
|
||||||
"test:fixtures": "jest test/fixtures --forceExit",
|
|
||||||
"test:e2e": "jest -i test/e2e --forceExit",
|
"test:e2e": "jest -i test/e2e --forceExit",
|
||||||
|
"test:fixtures": "jest test/fixtures --forceExit",
|
||||||
"test:lint": "yarn lint",
|
"test:lint": "yarn lint",
|
||||||
"test:unit": "jest test/unit packages --forceExit",
|
|
||||||
"test:types": "tsc -p test/types",
|
"test:types": "tsc -p test/types",
|
||||||
"postinstall": "lerna link && yarn dev",
|
"test:unit": "jest test/unit packages --forceExit"
|
||||||
"release": "./scripts/release"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.4.0",
|
"@babel/core": "^7.4.3",
|
||||||
"@babel/preset-env": "^7.4.2",
|
"@babel/preset-env": "^7.4.3",
|
||||||
"@nuxtjs/eslint-config": "^0.0.1",
|
"@nuxtjs/eslint-config": "^0.0.1",
|
||||||
"@vue/server-test-utils": "^1.0.0-beta.29",
|
"@vue/server-test-utils": "^1.0.0-beta.29",
|
||||||
"@vue/test-utils": "^1.0.0-beta.29",
|
"@vue/test-utils": "^1.0.0-beta.29",
|
||||||
"babel-eslint": "^10.0.1",
|
"babel-eslint": "^10.0.1",
|
||||||
"babel-jest": "^24.5.0",
|
"babel-jest": "^24.7.1",
|
||||||
"babel-plugin-dynamic-import-node": "^2.2.0",
|
"babel-plugin-dynamic-import-node": "^2.2.0",
|
||||||
"cheerio": "^1.0.0-rc.2",
|
"cheerio": "^1.0.0-rc.2",
|
||||||
"codecov": "^3.2.0",
|
"codecov": "^3.3.0",
|
||||||
"consola": "^2.5.7",
|
"consola": "^2.5.8",
|
||||||
"cross-env": "^5.2.0",
|
"cross-env": "^5.2.0",
|
||||||
"cross-spawn": "^6.0.5",
|
"cross-spawn": "^6.0.5",
|
||||||
"eslint": "^5.15.3",
|
"eslint": "^5.16.0",
|
||||||
"eslint-config-standard": "^12.0.0",
|
"eslint-config-standard": "^12.0.0",
|
||||||
"eslint-multiplexer": "^1.0.4",
|
"eslint-multiplexer": "^1.0.4",
|
||||||
"eslint-plugin-import": "^2.16.0",
|
"eslint-plugin-import": "^2.16.0",
|
||||||
"eslint-plugin-jest": "^22.4.1",
|
"eslint-plugin-jest": "^22.4.1",
|
||||||
"eslint-plugin-node": "^8.0.1",
|
"eslint-plugin-node": "^8.0.1",
|
||||||
"eslint-plugin-promise": "^4.0.1",
|
"eslint-plugin-promise": "^4.1.1",
|
||||||
"eslint-plugin-standard": "^4.0.0",
|
"eslint-plugin-standard": "^4.0.0",
|
||||||
"eslint-plugin-vue": "^5.2.2",
|
"eslint-plugin-vue": "^5.2.2",
|
||||||
"esm": "^3.2.20",
|
"esm": "^3.2.22",
|
||||||
"express": "^4.16.4",
|
"express": "^4.16.4",
|
||||||
"finalhandler": "^1.1.1",
|
"finalhandler": "^1.1.1",
|
||||||
"fork-ts-checker-webpack-plugin": "^1.0.0",
|
"fork-ts-checker-webpack-plugin": "^1.0.1",
|
||||||
"fs-extra": "^7.0.1",
|
"fs-extra": "^7.0.1",
|
||||||
"get-port": "^4.2.0",
|
"get-port": "^4.2.0",
|
||||||
"glob": "^7.1.3",
|
"glob": "^7.1.3",
|
||||||
"is-wsl": "^1.1.0",
|
"is-wsl": "^1.1.0",
|
||||||
"jest": "^24.5.0",
|
"jest": "^24.7.1",
|
||||||
"jsdom": "^14.0.0",
|
"jsdom": "^14.0.0",
|
||||||
"klaw-sync": "^6.0.0",
|
"klaw-sync": "^6.0.0",
|
||||||
"lerna": "^3.13.1",
|
"lerna": "^3.13.1",
|
||||||
"lodash": "^4.17.11",
|
"lodash": "^4.17.11",
|
||||||
"node-fetch": "^2.3.0",
|
"node-fetch": "^2.3.0",
|
||||||
"pug": "^2.0.3",
|
"puppeteer-core": "^1.14.0",
|
||||||
"pug-plain-loader": "^1.0.0",
|
|
||||||
"puppeteer-core": "^1.13.0",
|
|
||||||
"request": "^2.88.0",
|
"request": "^2.88.0",
|
||||||
"request-promise-native": "^1.0.7",
|
"request-promise-native": "^1.0.7",
|
||||||
"rimraf": "^2.6.3",
|
"rimraf": "^2.6.3",
|
||||||
"rollup": "^1.7.0",
|
"rollup": "^1.8.0",
|
||||||
"rollup-plugin-alias": "^1.5.1",
|
"rollup-plugin-alias": "^1.5.1",
|
||||||
"rollup-plugin-babel": "^4.3.2",
|
"rollup-plugin-babel": "^4.3.2",
|
||||||
"rollup-plugin-commonjs": "^9.2.1",
|
"rollup-plugin-commonjs": "^9.3.3",
|
||||||
"rollup-plugin-json": "^4.0.0",
|
"rollup-plugin-json": "^4.0.0",
|
||||||
"rollup-plugin-license": "^0.8.1",
|
"rollup-plugin-license": "^0.8.1",
|
||||||
"rollup-plugin-node-resolve": "^4.0.1",
|
"rollup-plugin-node-resolve": "^4.0.1",
|
||||||
"rollup-plugin-replace": "^2.1.1",
|
"rollup-plugin-replace": "^2.1.1",
|
||||||
"sort-package-json": "^1.21.0",
|
"sort-package-json": "^1.22.1",
|
||||||
"ts-jest": "^24.0.0",
|
"ts-jest": "^24.0.1",
|
||||||
"ts-loader": "^5.3.3",
|
"ts-loader": "^5.3.3",
|
||||||
"tslint": "^5.14.0",
|
"ts-node": "^8.0.3",
|
||||||
"typescript": "^3.3.4000",
|
"tslint": "^5.15.0",
|
||||||
|
"typescript": "^3.4.1",
|
||||||
"vue-jest": "^4.0.0-beta.2",
|
"vue-jest": "^4.0.0-beta.2",
|
||||||
"vue-property-decorator": "^8.1.0"
|
"vue-property-decorator": "^8.1.0"
|
||||||
},
|
}
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git+https://github.com/nuxt/nuxt.js.git"
|
|
||||||
},
|
|
||||||
"name": "nuxt.js"
|
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,22 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
# [2.6.0](https://github.com/nuxt/nuxt.js/compare/v2.5.1...v2.6.0) (2019-04-04)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* SyntaxError Unexpected token export in importing babel runtime helper ([#5401](https://github.com/nuxt/nuxt.js/issues/5401)) ([3b85dd9](https://github.com/nuxt/nuxt.js/commit/3b85dd9))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **babel-preset-app:** support specifying core-js version ([#5411](https://github.com/nuxt/nuxt.js/issues/5411)) ([159123f](https://github.com/nuxt/nuxt.js/commit/159123f))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
||||||
|
|
||||||
**Note:** Version bump only for package @nuxt/babel-preset-app
|
**Note:** Version bump only for package @nuxt/babel-preset-app
|
||||||
|
@ -15,6 +15,18 @@ babel: {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Note**: Since `core-js@2` and `core-js@3` are both supported from Babel 7.4.0, we recommend directly adding `core-js` and setting the version via the [`corejs`](#corejs) option.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
yarn add --dev core-js@3 @babel/runtime-corejs3
|
||||||
|
|
||||||
|
# or
|
||||||
|
|
||||||
|
yarn add --dev core-js@2 @babel/runtime-corejs2
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
...where `options` is an object with parameters, for example:
|
...where `options` is an object with parameters, for example:
|
||||||
```
|
```
|
||||||
const options = {
|
const options = {
|
||||||
@ -37,7 +49,7 @@ Below is a list of all available parameters:
|
|||||||
* **loose**, default `false` - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#loose)' parameter and also sets `loose=true` for `@babel/plugin-proposal-class-properties`
|
* **loose**, default `false` - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#loose)' parameter and also sets `loose=true` for `@babel/plugin-proposal-class-properties`
|
||||||
* **modern** passed by builder, either `true` or `false`
|
* **modern** passed by builder, either `true` or `false`
|
||||||
* **modules**, default `false` - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#modules)' parameter
|
* **modules**, default `false` - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#modules)' parameter
|
||||||
* **polyfills**, default `['es6.array.iterator','es6.promise','es6.object.assign','es7.promise.finally']`, more [in the corresponding repository](https://github.com/zloirock/core-js)
|
* **polyfills**, default `core-js@2: ['es6.array.iterator','es6.promise','es6.object.assign','es7.promise.finally']`, `core-js@3: ['es.array.iterator','es.promise','es.object.assign','es.promise.finally']`, more [in the corresponding repository](https://github.com/zloirock/core-js)
|
||||||
* **shippedProposals** - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#shippedproposals)' parameter
|
* **shippedProposals** - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#shippedproposals)' parameter
|
||||||
* **spec** - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#spec)' parameter
|
* **spec** - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#spec)' parameter
|
||||||
* **targets** - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#targets)' parameter
|
* **targets** - '[@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#targets)' parameter
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nuxt/babel-preset-app",
|
"name": "@nuxt/babel-preset-app",
|
||||||
"version": "2.5.1",
|
"version": "2.6.0",
|
||||||
"description": "babel-preset-app for nuxt.js",
|
"description": "babel-preset-app for nuxt.js",
|
||||||
"repository": "nuxt/nuxt.js",
|
"repository": "nuxt/nuxt.js",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@ -10,14 +10,14 @@
|
|||||||
],
|
],
|
||||||
"main": "src/index.js",
|
"main": "src/index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/core": "^7.4.0",
|
"@babel/core": "^7.4.3",
|
||||||
"@babel/plugin-proposal-class-properties": "^7.4.0",
|
"@babel/plugin-proposal-class-properties": "^7.4.0",
|
||||||
"@babel/plugin-proposal-decorators": "^7.4.0",
|
"@babel/plugin-proposal-decorators": "^7.4.0",
|
||||||
"@babel/plugin-syntax-dynamic-import": "^7.2.0",
|
"@babel/plugin-syntax-dynamic-import": "^7.2.0",
|
||||||
"@babel/plugin-transform-runtime": "^7.4.0",
|
"@babel/plugin-transform-runtime": "^7.4.3",
|
||||||
"@babel/preset-env": "^7.4.2",
|
"@babel/preset-env": "^7.4.3",
|
||||||
"@babel/runtime": "^7.4.2",
|
"@babel/runtime": "^7.4.3",
|
||||||
"@vue/babel-preset-jsx": "^1.0.0-beta.2",
|
"@vue/babel-preset-jsx": "^1.0.0-beta.3",
|
||||||
"core-js": "^2.6.5"
|
"core-js": "^2.6.5"
|
||||||
},
|
},
|
||||||
"publishConfig": {
|
"publishConfig": {
|
||||||
|
@ -1,19 +1,39 @@
|
|||||||
const defaultPolyfills = [
|
const coreJsMeta = {
|
||||||
// Promise polyfill alone doesn't work in IE,
|
2: {
|
||||||
// Needs this as well. see: #1642
|
prefixes: {
|
||||||
'es6.array.iterator',
|
es6: 'es6',
|
||||||
// This is required for webpack code splitting, vuex etc.
|
es7: 'es7'
|
||||||
'es6.promise',
|
},
|
||||||
// this is needed for object rest spread support in templates
|
builtIns: '@babel/preset-env/data/built-ins.json.js'
|
||||||
// as vue-template-es2015-compiler 1.8+ compiles it to Object.assign() calls.
|
},
|
||||||
'es6.object.assign',
|
3: {
|
||||||
// #2012 es7.promise replaces native Promise in FF and causes missing finally
|
prefixes: {
|
||||||
'es7.promise.finally'
|
es6: 'es',
|
||||||
]
|
es7: 'es'
|
||||||
|
},
|
||||||
|
builtIns: 'core-js-compat/data'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function getPolyfills(targets, includes, { ignoreBrowserslistConfig, configPath }) {
|
function getDefaultPolyfills(corejs) {
|
||||||
|
const { prefixes: { es6, es7 } } = coreJsMeta[corejs.version]
|
||||||
|
return [
|
||||||
|
// Promise polyfill alone doesn't work in IE,
|
||||||
|
// Needs this as well. see: #1642
|
||||||
|
`${es6}.array.iterator`,
|
||||||
|
// This is required for webpack code splitting, vuex etc.
|
||||||
|
`${es6}.promise`,
|
||||||
|
// this is needed for object rest spread support in templates
|
||||||
|
// as vue-template-es2015-compiler 1.8+ compiles it to Object.assign() calls.
|
||||||
|
`${es6}.object.assign`,
|
||||||
|
// #2012 es7.promise replaces native Promise in FF and causes missing finally
|
||||||
|
`${es7}.promise.finally`
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPolyfills(targets, includes, { ignoreBrowserslistConfig, configPath, corejs }) {
|
||||||
const { isPluginRequired } = require('@babel/preset-env')
|
const { isPluginRequired } = require('@babel/preset-env')
|
||||||
const builtInsList = require('@babel/preset-env/data/built-ins.json.js')
|
const builtInsList = require(coreJsMeta[corejs.version].builtIns)
|
||||||
const getTargets = require('@babel/preset-env/lib/targets-parser').default
|
const getTargets = require('@babel/preset-env/lib/targets-parser').default
|
||||||
const builtInTargets = getTargets(targets, {
|
const builtInTargets = getTargets(targets, {
|
||||||
ignoreBrowserslistConfig,
|
ignoreBrowserslistConfig,
|
||||||
@ -48,6 +68,12 @@ module.exports = (context, options = {}) => {
|
|||||||
absoluteRuntime
|
absoluteRuntime
|
||||||
} = options
|
} = options
|
||||||
|
|
||||||
|
let { corejs = { version: 2 } } = options
|
||||||
|
|
||||||
|
if (typeof corejs !== 'object') {
|
||||||
|
corejs = { version: Number(corejs) }
|
||||||
|
}
|
||||||
|
|
||||||
let { targets } = options
|
let { targets } = options
|
||||||
if (modern === true) {
|
if (modern === true) {
|
||||||
targets = { esmodules: true }
|
targets = { esmodules: true }
|
||||||
@ -57,17 +83,16 @@ module.exports = (context, options = {}) => {
|
|||||||
|
|
||||||
let polyfills
|
let polyfills
|
||||||
if (modern === false && useBuiltIns === 'usage' && buildTarget === 'client') {
|
if (modern === false && useBuiltIns === 'usage' && buildTarget === 'client') {
|
||||||
polyfills = getPolyfills(targets, userPolyfills || defaultPolyfills, {
|
polyfills = getPolyfills(targets, userPolyfills || getDefaultPolyfills(corejs), {
|
||||||
ignoreBrowserslistConfig,
|
ignoreBrowserslistConfig,
|
||||||
configPath
|
configPath,
|
||||||
|
corejs
|
||||||
})
|
})
|
||||||
plugins.push([require('./polyfills-plugin'), { polyfills }])
|
plugins.push([require('./polyfills-plugin'), { polyfills }])
|
||||||
} else {
|
} else {
|
||||||
polyfills = []
|
polyfills = []
|
||||||
}
|
}
|
||||||
|
|
||||||
const corejs = { version: 2 }
|
|
||||||
|
|
||||||
// Pass options along to babel-preset-env
|
// Pass options along to babel-preset-env
|
||||||
presets.push([
|
presets.push([
|
||||||
require('@babel/preset-env'), {
|
require('@babel/preset-env'), {
|
||||||
@ -106,7 +131,7 @@ module.exports = (context, options = {}) => {
|
|||||||
regenerator: useBuiltIns !== 'usage',
|
regenerator: useBuiltIns !== 'usage',
|
||||||
corejs: useBuiltIns !== false ? false : corejs,
|
corejs: useBuiltIns !== false ? false : corejs,
|
||||||
helpers: useBuiltIns === 'usage',
|
helpers: useBuiltIns === 'usage',
|
||||||
useESModules: true,
|
useESModules: buildTarget !== 'server',
|
||||||
absoluteRuntime
|
absoluteRuntime
|
||||||
}])
|
}])
|
||||||
|
|
||||||
|
@ -3,6 +3,17 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
# [2.6.0](https://github.com/nuxt/nuxt.js/compare/v2.5.1...v2.6.0) (2019-04-04)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* fail in case of missing core-js dependency ([#5342](https://github.com/nuxt/nuxt.js/issues/5342)) ([439b914](https://github.com/nuxt/nuxt.js/commit/439b914))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
||||||
|
|
||||||
**Note:** Version bump only for package @nuxt/builder
|
**Note:** Version bump only for package @nuxt/builder
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nuxt/builder",
|
"name": "@nuxt/builder",
|
||||||
"version": "2.5.1",
|
"version": "2.6.0",
|
||||||
"repository": "nuxt/nuxt.js",
|
"repository": "nuxt/nuxt.js",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"files": [
|
"files": [
|
||||||
@ -9,17 +9,17 @@
|
|||||||
"main": "dist/builder.js",
|
"main": "dist/builder.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxt/devalue": "^1.2.2",
|
"@nuxt/devalue": "^1.2.2",
|
||||||
"@nuxt/utils": "2.5.1",
|
"@nuxt/utils": "2.6.0",
|
||||||
"@nuxt/vue-app": "2.5.1",
|
"@nuxt/vue-app": "2.6.0",
|
||||||
"chokidar": "^2.1.2",
|
"chokidar": "^2.1.5",
|
||||||
"consola": "^2.5.7",
|
"consola": "^2.5.8",
|
||||||
"fs-extra": "^7.0.1",
|
"fs-extra": "^7.0.1",
|
||||||
"glob": "^7.1.3",
|
"glob": "^7.1.3",
|
||||||
"hash-sum": "^1.0.2",
|
"hash-sum": "^1.0.2",
|
||||||
"ignore": "^5.0.6",
|
"ignore": "^5.0.6",
|
||||||
"lodash": "^4.17.11",
|
"lodash": "^4.17.11",
|
||||||
"pify": "^4.0.1",
|
"pify": "^4.0.1",
|
||||||
"semver": "^5.6.0",
|
"semver": "^6.0.0",
|
||||||
"serialize-javascript": "^1.6.1",
|
"serialize-javascript": "^1.6.1",
|
||||||
"upath": "^1.1.2"
|
"upath": "^1.1.2"
|
||||||
},
|
},
|
||||||
|
@ -222,7 +222,7 @@ export default class Builder {
|
|||||||
'Using npm:\n',
|
'Using npm:\n',
|
||||||
`npm i ${dependencyFixes.join(' ')}\n`
|
`npm i ${dependencyFixes.join(' ')}\n`
|
||||||
)
|
)
|
||||||
throw new Error('Missing Template Dependencies')
|
throw new Error('Missing App Dependencies')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -263,7 +263,7 @@ describe('builder: builder build', () => {
|
|||||||
.mockReturnValueOnce({ version: 'alpha' })
|
.mockReturnValueOnce({ version: 'alpha' })
|
||||||
.mockReturnValueOnce(undefined)
|
.mockReturnValueOnce(undefined)
|
||||||
|
|
||||||
expect(() => builder.validateTemplate()).toThrow('Missing Template Dependencies')
|
expect(() => builder.validateTemplate()).toThrow('Missing App Dependencies')
|
||||||
|
|
||||||
expect(nuxt.resolver.requireModule).toBeCalledTimes(2)
|
expect(nuxt.resolver.requireModule).toBeCalledTimes(2)
|
||||||
expect(nuxt.resolver.requireModule).nthCalledWith(1, 'join(vue, package.json)')
|
expect(nuxt.resolver.requireModule).nthCalledWith(1, 'join(vue, package.json)')
|
||||||
|
@ -3,6 +3,19 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
# [2.6.0](https://github.com/nuxt/nuxt.js/compare/v2.5.1...v2.6.0) (2019-04-04)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **cli:** add `--quiet` option to nuxt generate command ([#5357](https://github.com/nuxt/nuxt.js/issues/5357)) ([91f4eb0](https://github.com/nuxt/nuxt.js/commit/91f4eb0))
|
||||||
|
* **cli:** add internal _generate and _build options ([#5434](https://github.com/nuxt/nuxt.js/issues/5434)) ([516aea3](https://github.com/nuxt/nuxt.js/commit/516aea3))
|
||||||
|
* **typescript:** detect typescript based on `tsconfig.json` ([#5412](https://github.com/nuxt/nuxt.js/issues/5412)) ([6ffc5c5](https://github.com/nuxt/nuxt.js/commit/6ffc5c5))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
||||||
|
|
||||||
**Note:** Version bump only for package @nuxt/cli
|
**Note:** Version bump only for package @nuxt/cli
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nuxt/cli",
|
"name": "@nuxt/cli",
|
||||||
"version": "2.5.1",
|
"version": "2.6.0",
|
||||||
"repository": "nuxt/nuxt.js",
|
"repository": "nuxt/nuxt.js",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"files": [
|
"files": [
|
||||||
@ -12,19 +12,20 @@
|
|||||||
"nuxt-cli": "bin/nuxt-cli.js"
|
"nuxt-cli": "bin/nuxt-cli.js"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxt/config": "2.5.1",
|
"@nuxt/config": "2.6.0",
|
||||||
"@nuxt/utils": "2.5.1",
|
"@nuxt/utils": "2.6.0",
|
||||||
"boxen": "^3.0.0",
|
"boxen": "^3.0.0",
|
||||||
"chalk": "^2.4.2",
|
"chalk": "^2.4.2",
|
||||||
"consola": "^2.5.7",
|
"consola": "^2.5.8",
|
||||||
"esm": "^3.2.20",
|
"esm": "^3.2.22",
|
||||||
"execa": "^1.0.0",
|
"execa": "^1.0.0",
|
||||||
"exit": "^0.1.2",
|
"exit": "^0.1.2",
|
||||||
|
"fs-extra": "^7.0.1",
|
||||||
"minimist": "^1.2.0",
|
"minimist": "^1.2.0",
|
||||||
"opener": "1.5.1",
|
"opener": "1.5.1",
|
||||||
"pretty-bytes": "^5.1.0",
|
"pretty-bytes": "^5.1.0",
|
||||||
"std-env": "^2.2.1",
|
"std-env": "^2.2.1",
|
||||||
"wrap-ansi": "^5.0.0"
|
"wrap-ansi": "^5.1.0"
|
||||||
},
|
},
|
||||||
"publishConfig": {
|
"publishConfig": {
|
||||||
"access": "public"
|
"access": "public"
|
||||||
|
@ -6,7 +6,7 @@ import { name, version } from '../package.json'
|
|||||||
import { loadNuxtConfig, forceExit } from './utils'
|
import { loadNuxtConfig, forceExit } from './utils'
|
||||||
import { indent, foldLines, colorize } from './utils/formatting'
|
import { indent, foldLines, colorize } from './utils/formatting'
|
||||||
import { startSpaces, optionSpaces, forceExitTimeout } from './utils/constants'
|
import { startSpaces, optionSpaces, forceExitTimeout } from './utils/constants'
|
||||||
import { detectAndSetupTypeScriptSupport } from './utils/typescript'
|
import { detectTypeScript } from './utils/typescript'
|
||||||
import * as imports from './imports'
|
import * as imports from './imports'
|
||||||
|
|
||||||
export default class NuxtCommand {
|
export default class NuxtCommand {
|
||||||
@ -92,7 +92,11 @@ export default class NuxtCommand {
|
|||||||
|
|
||||||
async getNuxtConfig(extraOptions = {}) {
|
async getNuxtConfig(extraOptions = {}) {
|
||||||
const rootDir = path.resolve(this.argv._[0] || '.')
|
const rootDir = path.resolve(this.argv._[0] || '.')
|
||||||
extraOptions._typescript = await detectAndSetupTypeScriptSupport(rootDir, { transpileOnly: this.cmd.name === 'start' })
|
|
||||||
|
// Typescript support
|
||||||
|
extraOptions._typescript = await detectTypeScript(rootDir, {
|
||||||
|
transpileOnly: this.cmd.name === 'start'
|
||||||
|
})
|
||||||
|
|
||||||
const config = await loadNuxtConfig(this.argv)
|
const config = await loadNuxtConfig(this.argv)
|
||||||
const options = Object.assign(config, extraOptions)
|
const options = Object.assign(config, extraOptions)
|
||||||
|
@ -61,7 +61,7 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
async run(cmd) {
|
async run(cmd) {
|
||||||
const config = await cmd.getNuxtConfig({ dev: false })
|
const config = await cmd.getNuxtConfig({ dev: false, _build: true })
|
||||||
const nuxt = await cmd.getNuxt(config)
|
const nuxt = await cmd.getNuxt(config)
|
||||||
|
|
||||||
if (cmd.argv.lock) {
|
if (cmd.argv.lock) {
|
||||||
|
@ -35,7 +35,7 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
async _startDev(cmd, argv) {
|
async _startDev(cmd, argv) {
|
||||||
const config = await cmd.getNuxtConfig({ dev: true })
|
const config = await cmd.getNuxtConfig({ dev: true, _build: true })
|
||||||
const nuxt = await cmd.getNuxt(config)
|
const nuxt = await cmd.getNuxt(config)
|
||||||
|
|
||||||
// Setup hooks
|
// Setup hooks
|
||||||
|
@ -25,6 +25,18 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
quiet: {
|
||||||
|
alias: 'q',
|
||||||
|
type: 'boolean',
|
||||||
|
description: 'Disable output except for errors',
|
||||||
|
prepare(cmd, options, argv) {
|
||||||
|
// Silence output when using --quiet
|
||||||
|
options.build = options.build || {}
|
||||||
|
if (argv.quiet) {
|
||||||
|
options.build.quiet = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
modern: {
|
modern: {
|
||||||
...common.modern,
|
...common.modern,
|
||||||
description: 'Generate app in modern build (modern mode can be only client)',
|
description: 'Generate app in modern build (modern mode can be only client)',
|
||||||
@ -41,7 +53,7 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
async run(cmd) {
|
async run(cmd) {
|
||||||
const config = await cmd.getNuxtConfig({ dev: false })
|
const config = await cmd.getNuxtConfig({ dev: false, _generate: true, _build: cmd.argv.build })
|
||||||
|
|
||||||
// Disable analyze if set by the nuxt config
|
// Disable analyze if set by the nuxt config
|
||||||
if (!config.build) {
|
if (!config.build) {
|
||||||
|
@ -29,4 +29,8 @@ export const builder = () => _import('@nuxt/builder')
|
|||||||
export const webpack = () => _import('@nuxt/webpack')
|
export const webpack = () => _import('@nuxt/webpack')
|
||||||
export const generator = () => _import('@nuxt/generator')
|
export const generator = () => _import('@nuxt/generator')
|
||||||
export const core = () => _import('@nuxt/core')
|
export const core = () => _import('@nuxt/core')
|
||||||
|
|
||||||
|
export const tsNode = () => _import('ts-node')
|
||||||
|
export const nuxtTypescript = () => _import('@nuxt/typescript')
|
||||||
|
|
||||||
export const importModule = _import
|
export const importModule = _import
|
||||||
|
@ -101,6 +101,10 @@ export function showBanner(nuxt) {
|
|||||||
// Running mode
|
// Running mode
|
||||||
titleLines.push(`Running in ${nuxt.options.dev ? chalk.bold.blue('development') : chalk.bold.green('production')} mode (${chalk.bold(nuxt.options.mode)})`)
|
titleLines.push(`Running in ${nuxt.options.dev ? chalk.bold.blue('development') : chalk.bold.green('production')} mode (${chalk.bold(nuxt.options.mode)})`)
|
||||||
|
|
||||||
|
if (nuxt.options._typescript && nuxt.options._typescript.runtime) {
|
||||||
|
titleLines.push(`TypeScript support is ${chalk.green.bold('enabled')}`)
|
||||||
|
}
|
||||||
|
|
||||||
// https://nodejs.org/api/process.html#process_process_memoryusage
|
// https://nodejs.org/api/process.html#process_process_memoryusage
|
||||||
const { heapUsed, rss } = process.memoryUsage()
|
const { heapUsed, rss } = process.memoryUsage()
|
||||||
titleLines.push(`Memory usage: ${chalk.bold(prettyBytes(heapUsed))} (RSS: ${prettyBytes(rss)})`)
|
titleLines.push(`Memory usage: ${chalk.bold(prettyBytes(heapUsed))} (RSS: ${prettyBytes(rss)})`)
|
||||||
|
@ -1,38 +1,59 @@
|
|||||||
import path from 'path'
|
import path from 'path'
|
||||||
import { existsSync } from 'fs'
|
import fs from 'fs-extra'
|
||||||
import chalk from 'chalk'
|
import * as imports from '../imports'
|
||||||
import consola from 'consola'
|
|
||||||
import { warningBox } from './formatting'
|
|
||||||
|
|
||||||
const dependencyNotFoundMessage =
|
async function registerTSNode({ tsConfigPath, options }) {
|
||||||
`Please install @nuxt/typescript and rerun the command
|
const { register } = await imports.tsNode()
|
||||||
|
|
||||||
${chalk.bold('Using yarn')}
|
// https://github.com/TypeStrong/ts-node
|
||||||
yarn add -D @nuxt/typescript
|
register({
|
||||||
|
project: tsConfigPath,
|
||||||
${chalk.bold('Using npm')}
|
compilerOptions: {
|
||||||
npm install -D @nuxt/typescript`
|
module: 'commonjs'
|
||||||
|
},
|
||||||
export async function detectAndSetupTypeScriptSupport(rootDir, options = {}) {
|
...options
|
||||||
const tsConfigPath = path.resolve(rootDir, 'tsconfig.json')
|
})
|
||||||
|
}
|
||||||
if (!existsSync(tsConfigPath)) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
consola.info(`${chalk.bold.blue('tsconfig.json')} found, enabling TypeScript runtime support`)
|
|
||||||
|
|
||||||
|
async function getNuxtTypeScript() {
|
||||||
try {
|
try {
|
||||||
const { setup } = require('@nuxt/typescript')
|
return await imports.nuxtTypescript()
|
||||||
await setup(tsConfigPath, options)
|
} catch (error) {
|
||||||
} catch (e) {
|
if (error.code !== 'MODULE_NOT_FOUND') {
|
||||||
if (e.code === 'MODULE_NOT_FOUND') {
|
throw (error)
|
||||||
process.stdout.write(warningBox(dependencyNotFoundMessage, chalk.yellow('An external official dependency is needed to enable TS support')))
|
|
||||||
process.exit(1)
|
|
||||||
} else {
|
|
||||||
throw (e)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return true
|
|
||||||
|
export async function detectTypeScript(rootDir, options = {}) {
|
||||||
|
const typescript = {
|
||||||
|
tsConfigPath: path.resolve(rootDir, 'tsconfig.json'),
|
||||||
|
tsConfigExists: false,
|
||||||
|
runtime: false,
|
||||||
|
build: false,
|
||||||
|
options
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if tsconfig.json exists
|
||||||
|
typescript.tsConfigExists = await fs.exists(typescript.tsConfigPath)
|
||||||
|
|
||||||
|
// Skip if tsconfig.json not exists
|
||||||
|
if (!typescript.tsConfigExists) {
|
||||||
|
return typescript
|
||||||
|
}
|
||||||
|
|
||||||
|
// Register runtime support
|
||||||
|
typescript.runtime = true
|
||||||
|
await registerTSNode(typescript)
|
||||||
|
|
||||||
|
// Try to load @nuxt/typescript
|
||||||
|
const nuxtTypeScript = await getNuxtTypeScript()
|
||||||
|
|
||||||
|
// If exists do additional setup
|
||||||
|
if (nuxtTypeScript) {
|
||||||
|
typescript.build = true
|
||||||
|
await nuxtTypeScript.setupDefaults(typescript.tsConfigPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
return typescript
|
||||||
}
|
}
|
||||||
|
41
packages/cli/test/unit/typescript.test.js
Normal file
41
packages/cli/test/unit/typescript.test.js
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
import { resolve } from 'path'
|
||||||
|
import { mkdirp, writeFile, remove } from 'fs-extra'
|
||||||
|
import { register } from 'ts-node'
|
||||||
|
import { detectTypeScript } from '../../src/utils/typescript'
|
||||||
|
|
||||||
|
jest.mock('ts-node')
|
||||||
|
|
||||||
|
describe('Typescript Support', () => {
|
||||||
|
const rootDir = 'tmp'
|
||||||
|
const rootDir2 = 'tmp2'
|
||||||
|
const tsConfigPath = resolve(rootDir, 'tsconfig.json')
|
||||||
|
|
||||||
|
beforeAll(async () => {
|
||||||
|
await mkdirp(rootDir)
|
||||||
|
await mkdirp(rootDir2)
|
||||||
|
await writeFile(tsConfigPath, '{}', 'utf-8')
|
||||||
|
})
|
||||||
|
|
||||||
|
test('detectTypeScript detects and registers runtime', async () => {
|
||||||
|
register.mockReset()
|
||||||
|
await detectTypeScript(rootDir)
|
||||||
|
expect(register).toHaveBeenCalledTimes(1)
|
||||||
|
expect(register).toHaveBeenCalledWith({
|
||||||
|
project: tsConfigPath,
|
||||||
|
compilerOptions: {
|
||||||
|
module: 'commonjs'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
test('detectTypeScript skips rootDir without tsconfig.json', async () => {
|
||||||
|
register.mockReset()
|
||||||
|
await detectTypeScript(rootDir2)
|
||||||
|
expect(register).toHaveBeenCalledTimes(0)
|
||||||
|
})
|
||||||
|
|
||||||
|
afterAll(async () => {
|
||||||
|
await remove(rootDir)
|
||||||
|
await remove(rootDir2)
|
||||||
|
})
|
||||||
|
})
|
@ -3,6 +3,23 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
# [2.6.0](https://github.com/nuxt/nuxt.js/compare/v2.5.1...v2.6.0) (2019-04-04)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **build:** disable loading `babel.config.js` by default ([#5365](https://github.com/nuxt/nuxt.js/issues/5365)) ([64fa424](https://github.com/nuxt/nuxt.js/commit/64fa424))
|
||||||
|
* add type definition for configuring forkTsChecker ([2c1444d](https://github.com/nuxt/nuxt.js/commit/2c1444d))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **vue-renderer:** add csp meta tags ([#5354](https://github.com/nuxt/nuxt.js/issues/5354)) ([b978a37](https://github.com/nuxt/nuxt.js/commit/b978a37))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nuxt/config",
|
"name": "@nuxt/config",
|
||||||
"version": "2.5.1",
|
"version": "2.6.0",
|
||||||
"repository": "nuxt/nuxt.js",
|
"repository": "nuxt/nuxt.js",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"files": [
|
"files": [
|
||||||
@ -10,8 +10,8 @@
|
|||||||
"main": "dist/config.js",
|
"main": "dist/config.js",
|
||||||
"typings": "types/index.d.ts",
|
"typings": "types/index.d.ts",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxt/utils": "2.5.1",
|
"@nuxt/utils": "2.6.0",
|
||||||
"consola": "^2.5.7",
|
"consola": "^2.5.8",
|
||||||
"std-env": "^2.2.1"
|
"std-env": "^2.2.1"
|
||||||
},
|
},
|
||||||
"publishConfig": {
|
"publishConfig": {
|
||||||
|
@ -79,6 +79,7 @@ export default () => ({
|
|||||||
commons: true
|
commons: true
|
||||||
},
|
},
|
||||||
babel: {
|
babel: {
|
||||||
|
configFile: false,
|
||||||
babelrc: false,
|
babelrc: false,
|
||||||
cacheDirectory: undefined
|
cacheDirectory: undefined
|
||||||
},
|
},
|
||||||
|
@ -3,7 +3,6 @@ import fs from 'fs'
|
|||||||
import defaultsDeep from 'lodash/defaultsDeep'
|
import defaultsDeep from 'lodash/defaultsDeep'
|
||||||
import defaults from 'lodash/defaults'
|
import defaults from 'lodash/defaults'
|
||||||
import pick from 'lodash/pick'
|
import pick from 'lodash/pick'
|
||||||
import isObject from 'lodash/isObject'
|
|
||||||
import uniq from 'lodash/uniq'
|
import uniq from 'lodash/uniq'
|
||||||
import consola from 'consola'
|
import consola from 'consola'
|
||||||
import { guardDir, isNonEmptyString, isPureObject, isUrl, getMainModule } from '@nuxt/utils'
|
import { guardDir, isNonEmptyString, isPureObject, isUrl, getMainModule } from '@nuxt/utils'
|
||||||
@ -179,16 +178,14 @@ export function getNuxtConfig(_options) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Apply default hash to CSP option
|
// Apply default hash to CSP option
|
||||||
const { csp } = options.render
|
if (options.render.csp) {
|
||||||
|
options.render.csp = defaults({}, options.render.csp, {
|
||||||
const cspDefaults = {
|
hashAlgorithm: 'sha256',
|
||||||
hashAlgorithm: 'sha256',
|
allowedSources: undefined,
|
||||||
allowedSources: undefined,
|
policies: undefined,
|
||||||
policies: undefined,
|
addMeta: Boolean(options._generate),
|
||||||
reportOnly: options.debug
|
reportOnly: options.debug
|
||||||
}
|
})
|
||||||
if (csp) {
|
|
||||||
options.render.csp = defaults(isObject(csp) ? csp : {}, cspDefaults)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// cssSourceMap
|
// cssSourceMap
|
||||||
|
@ -12,6 +12,7 @@ Object {
|
|||||||
"babel": Object {
|
"babel": Object {
|
||||||
"babelrc": false,
|
"babelrc": false,
|
||||||
"cacheDirectory": false,
|
"cacheDirectory": false,
|
||||||
|
"configFile": false,
|
||||||
},
|
},
|
||||||
"cache": false,
|
"cache": false,
|
||||||
"crossorigin": undefined,
|
"crossorigin": undefined,
|
||||||
|
@ -9,6 +9,7 @@ Object {
|
|||||||
"babel": Object {
|
"babel": Object {
|
||||||
"babelrc": false,
|
"babelrc": false,
|
||||||
"cacheDirectory": undefined,
|
"cacheDirectory": undefined,
|
||||||
|
"configFile": false,
|
||||||
},
|
},
|
||||||
"cache": false,
|
"cache": false,
|
||||||
"crossorigin": undefined,
|
"crossorigin": undefined,
|
||||||
@ -340,6 +341,7 @@ Object {
|
|||||||
"babel": Object {
|
"babel": Object {
|
||||||
"babelrc": false,
|
"babelrc": false,
|
||||||
"cacheDirectory": undefined,
|
"cacheDirectory": undefined,
|
||||||
|
"configFile": false,
|
||||||
},
|
},
|
||||||
"cache": false,
|
"cache": false,
|
||||||
"crossorigin": undefined,
|
"crossorigin": undefined,
|
||||||
|
@ -81,6 +81,7 @@ describe('config: options', () => {
|
|||||||
const { render: { csp } } = getNuxtConfig({ render: { csp: { allowedSources: true, test: true } } })
|
const { render: { csp } } = getNuxtConfig({ render: { csp: { allowedSources: true, test: true } } })
|
||||||
expect(csp).toEqual({
|
expect(csp).toEqual({
|
||||||
hashAlgorithm: 'sha256',
|
hashAlgorithm: 'sha256',
|
||||||
|
addMeta: false,
|
||||||
allowedSources: true,
|
allowedSources: true,
|
||||||
policies: undefined,
|
policies: undefined,
|
||||||
reportOnly: false,
|
reportOnly: false,
|
||||||
@ -189,9 +190,10 @@ describe('config: options', () => {
|
|||||||
})
|
})
|
||||||
expect(consola.warn).toHaveBeenCalledWith('@nuxtjs/babel-preset-app has been deprecated, please use @nuxt/babel-preset-app.')
|
expect(consola.warn).toHaveBeenCalledWith('@nuxtjs/babel-preset-app has been deprecated, please use @nuxt/babel-preset-app.')
|
||||||
expect(babel).toEqual({
|
expect(babel).toEqual({
|
||||||
'babelrc': false,
|
configFile: false,
|
||||||
'cacheDirectory': false,
|
babelrc: false,
|
||||||
'presets': ['@nuxt/babel-preset-app']
|
cacheDirectory: false,
|
||||||
|
presets: ['@nuxt/babel-preset-app']
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -200,9 +202,10 @@ describe('config: options', () => {
|
|||||||
build: { babel: { presets: [['@nuxt/babel-preset-app', { test: true }]] } }
|
build: { babel: { presets: [['@nuxt/babel-preset-app', { test: true }]] } }
|
||||||
})
|
})
|
||||||
expect(babel).toEqual({
|
expect(babel).toEqual({
|
||||||
'babelrc': false,
|
configFile: false,
|
||||||
'cacheDirectory': false,
|
babelrc: false,
|
||||||
'presets': [['@nuxt/babel-preset-app', { test: true }]]
|
cacheDirectory: false,
|
||||||
|
presets: [['@nuxt/babel-preset-app', { test: true }]]
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
4
packages/config/types/build.d.ts
vendored
4
packages/config/types/build.d.ts
vendored
@ -58,6 +58,8 @@ export interface NuxtConfigurationBuild {
|
|||||||
templates?: any
|
templates?: any
|
||||||
terser?: TerserPluginOptions | boolean
|
terser?: TerserPluginOptions | boolean
|
||||||
transpile?: (string | RegExp)[]
|
transpile?: (string | RegExp)[]
|
||||||
useForkTsChecker?: { [key: string]: string } | boolean // TBD - Couldn't find typedefs for the forkTsCheckerWebpackPlugin options
|
typescript?: {
|
||||||
|
typeCheck?: { [key: string]: any } | boolean // TBD - Couldn't find typedefs for the forkTsCheckerWebpackPlugin options
|
||||||
|
}
|
||||||
watch?: string[]
|
watch?: string[]
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,17 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
# [2.6.0](https://github.com/nuxt/nuxt.js/compare/v2.5.1...v2.6.0) (2019-04-04)
|
||||||
|
|
||||||
|
|
||||||
|
### Reverts
|
||||||
|
|
||||||
|
* **core:** call ready to prevent breaking changes ([#5413](https://github.com/nuxt/nuxt.js/issues/5413)) ([001ba77](https://github.com/nuxt/nuxt.js/commit/001ba77))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nuxt/core",
|
"name": "@nuxt/core",
|
||||||
"version": "2.5.1",
|
"version": "2.6.0",
|
||||||
"repository": "nuxt/nuxt.js",
|
"repository": "nuxt/nuxt.js",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"files": [
|
"files": [
|
||||||
@ -8,14 +8,14 @@
|
|||||||
],
|
],
|
||||||
"main": "dist/core.js",
|
"main": "dist/core.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxt/config": "2.5.1",
|
"@nuxt/config": "2.6.0",
|
||||||
"@nuxt/devalue": "^1.2.2",
|
"@nuxt/devalue": "^1.2.2",
|
||||||
"@nuxt/server": "2.5.1",
|
"@nuxt/server": "2.6.0",
|
||||||
"@nuxt/utils": "2.5.1",
|
"@nuxt/utils": "2.6.0",
|
||||||
"@nuxt/vue-renderer": "2.5.1",
|
"@nuxt/vue-renderer": "2.6.0",
|
||||||
"consola": "^2.5.7",
|
"consola": "^2.5.8",
|
||||||
"debug": "^4.1.1",
|
"debug": "^4.1.1",
|
||||||
"esm": "^3.2.20",
|
"esm": "^3.2.22",
|
||||||
"fs-extra": "^7.0.1",
|
"fs-extra": "^7.0.1",
|
||||||
"hash-sum": "^1.0.2",
|
"hash-sum": "^1.0.2",
|
||||||
"std-env": "^2.2.1"
|
"std-env": "^2.2.1"
|
||||||
|
@ -38,6 +38,13 @@ export default class Nuxt extends Hookable {
|
|||||||
if (this.options.server !== false) {
|
if (this.options.server !== false) {
|
||||||
this._initServer()
|
this._initServer()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Call ready
|
||||||
|
if (this.options._ready !== false) {
|
||||||
|
this.ready().catch((err) => {
|
||||||
|
consola.fatal(err)
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static get version() {
|
static get version() {
|
||||||
@ -46,9 +53,7 @@ export default class Nuxt extends Hookable {
|
|||||||
|
|
||||||
ready() {
|
ready() {
|
||||||
if (!this._ready) {
|
if (!this._ready) {
|
||||||
this._ready = this._init().catch((err) => {
|
this._ready = this._init()
|
||||||
consola.fatal(err)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
return this._ready
|
return this._ready
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import consola from 'consola'
|
|
||||||
import { defineAlias } from '@nuxt/utils'
|
import { defineAlias } from '@nuxt/utils'
|
||||||
import { getNuxtConfig } from '@nuxt/config'
|
import { getNuxtConfig } from '@nuxt/config'
|
||||||
import { Server } from '@nuxt/server'
|
import { Server } from '@nuxt/server'
|
||||||
@ -14,7 +13,9 @@ jest.mock('@nuxt/utils')
|
|||||||
jest.mock('@nuxt/server')
|
jest.mock('@nuxt/server')
|
||||||
|
|
||||||
jest.mock('@nuxt/config', () => ({
|
jest.mock('@nuxt/config', () => ({
|
||||||
getNuxtConfig: jest.fn(() => ({}))
|
getNuxtConfig: jest.fn(() => ({
|
||||||
|
_ready: false
|
||||||
|
}))
|
||||||
}))
|
}))
|
||||||
|
|
||||||
describe('core: nuxt', () => {
|
describe('core: nuxt', () => {
|
||||||
@ -67,10 +68,7 @@ describe('core: nuxt', () => {
|
|||||||
const err = new Error('nuxt ready failed')
|
const err = new Error('nuxt ready failed')
|
||||||
const nuxt = new Nuxt()
|
const nuxt = new Nuxt()
|
||||||
nuxt._init = () => Promise.reject(err)
|
nuxt._init = () => Promise.reject(err)
|
||||||
await nuxt.ready()
|
await expect(nuxt.ready()).rejects.toThrow(err)
|
||||||
|
|
||||||
expect(consola.fatal).toBeCalledTimes(1)
|
|
||||||
expect(consola.fatal).toBeCalledWith(err)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
test('should return nuxt version from package.json', () => {
|
test('should return nuxt version from package.json', () => {
|
||||||
@ -113,7 +111,7 @@ describe('core: nuxt', () => {
|
|||||||
|
|
||||||
test('should add object hooks', async () => {
|
test('should add object hooks', async () => {
|
||||||
const hooks = {}
|
const hooks = {}
|
||||||
getNuxtConfig.mockReturnValueOnce({ hooks })
|
getNuxtConfig.mockReturnValueOnce({ hooks, _ready: false })
|
||||||
const nuxt = new Nuxt()
|
const nuxt = new Nuxt()
|
||||||
|
|
||||||
nuxt.addHooks = jest.fn()
|
nuxt.addHooks = jest.fn()
|
||||||
|
@ -3,6 +3,14 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
# [2.6.0](https://github.com/nuxt/nuxt.js/compare/v2.5.1...v2.6.0) (2019-04-04)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @nuxt/generator
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
||||||
|
|
||||||
**Note:** Version bump only for package @nuxt/generator
|
**Note:** Version bump only for package @nuxt/generator
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nuxt/generator",
|
"name": "@nuxt/generator",
|
||||||
"version": "2.5.1",
|
"version": "2.6.0",
|
||||||
"repository": "nuxt/nuxt.js",
|
"repository": "nuxt/nuxt.js",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"files": [
|
"files": [
|
||||||
@ -8,11 +8,11 @@
|
|||||||
],
|
],
|
||||||
"main": "dist/generator.js",
|
"main": "dist/generator.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxt/utils": "2.5.1",
|
"@nuxt/utils": "2.6.0",
|
||||||
"chalk": "^2.4.2",
|
"chalk": "^2.4.2",
|
||||||
"consola": "^2.5.7",
|
"consola": "^2.5.8",
|
||||||
"fs-extra": "^7.0.1",
|
"fs-extra": "^7.0.1",
|
||||||
"html-minifier": "^3.5.21"
|
"html-minifier": "^4.0.0"
|
||||||
},
|
},
|
||||||
"publishConfig": {
|
"publishConfig": {
|
||||||
"access": "public"
|
"access": "public"
|
||||||
|
@ -3,6 +3,14 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
# [2.6.0](https://github.com/nuxt/nuxt.js/compare/v2.5.1...v2.6.0) (2019-04-04)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @nuxt/server
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
||||||
|
|
||||||
**Note:** Version bump only for package @nuxt/server
|
**Note:** Version bump only for package @nuxt/server
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nuxt/server",
|
"name": "@nuxt/server",
|
||||||
"version": "2.5.1",
|
"version": "2.6.0",
|
||||||
"repository": "nuxt/nuxt.js",
|
"repository": "nuxt/nuxt.js",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"files": [
|
"files": [
|
||||||
@ -8,13 +8,13 @@
|
|||||||
],
|
],
|
||||||
"main": "dist/server.js",
|
"main": "dist/server.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxt/config": "2.5.1",
|
"@nuxt/config": "2.6.0",
|
||||||
"@nuxt/utils": "2.5.1",
|
"@nuxt/utils": "2.6.0",
|
||||||
"@nuxtjs/youch": "^4.2.3",
|
"@nuxtjs/youch": "^4.2.3",
|
||||||
"chalk": "^2.4.2",
|
"chalk": "^2.4.2",
|
||||||
"compression": "^1.7.4",
|
"compression": "^1.7.4",
|
||||||
"connect": "^3.6.6",
|
"connect": "^3.6.6",
|
||||||
"consola": "^2.5.7",
|
"consola": "^2.5.8",
|
||||||
"etag": "^1.8.1",
|
"etag": "^1.8.1",
|
||||||
"fresh": "^0.5.2",
|
"fresh": "^0.5.2",
|
||||||
"fs-extra": "^7.0.1",
|
"fs-extra": "^7.0.1",
|
||||||
@ -22,7 +22,7 @@
|
|||||||
"launch-editor-middleware": "^2.2.1",
|
"launch-editor-middleware": "^2.2.1",
|
||||||
"on-headers": "^1.0.2",
|
"on-headers": "^1.0.2",
|
||||||
"pify": "^4.0.1",
|
"pify": "^4.0.1",
|
||||||
"semver": "^5.6.0",
|
"semver": "^6.0.0",
|
||||||
"serve-placeholder": "^1.2.1",
|
"serve-placeholder": "^1.2.1",
|
||||||
"serve-static": "^1.13.2",
|
"serve-static": "^1.13.2",
|
||||||
"server-destroy": "^1.0.1",
|
"server-destroy": "^1.0.1",
|
||||||
|
@ -3,6 +3,17 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
# [2.6.0](https://github.com/nuxt/nuxt.js/compare/v2.5.1...v2.6.0) (2019-04-04)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **typescript:** detect typescript based on `tsconfig.json` ([#5412](https://github.com/nuxt/nuxt.js/issues/5412)) ([6ffc5c5](https://github.com/nuxt/nuxt.js/commit/6ffc5c5))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
||||||
|
|
||||||
**Note:** Version bump only for package @nuxt/typescript
|
**Note:** Version bump only for package @nuxt/typescript
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nuxt/typescript",
|
"name": "@nuxt/typescript",
|
||||||
"version": "2.5.1",
|
"version": "2.6.0",
|
||||||
"repository": "nuxt/nuxt.js",
|
"repository": "nuxt/nuxt.js",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"files": [
|
"files": [
|
||||||
@ -13,20 +13,19 @@
|
|||||||
"@types/etag": "^1.8.0",
|
"@types/etag": "^1.8.0",
|
||||||
"@types/express": "^4.16.1",
|
"@types/express": "^4.16.1",
|
||||||
"@types/html-minifier": "^3.5.3",
|
"@types/html-minifier": "^3.5.3",
|
||||||
"@types/node": "^11.11.4",
|
"@types/node": "^11.13.0",
|
||||||
"@types/optimize-css-assets-webpack-plugin": "^1.3.4",
|
"@types/optimize-css-assets-webpack-plugin": "^1.3.4",
|
||||||
"@types/serve-static": "^1.13.2",
|
"@types/serve-static": "^1.13.2",
|
||||||
"@types/terser-webpack-plugin": "^1.2.1",
|
"@types/terser-webpack-plugin": "^1.2.1",
|
||||||
"@types/webpack": "^4.4.26",
|
"@types/webpack": "^4.4.27",
|
||||||
"@types/webpack-bundle-analyzer": "^2.13.1",
|
"@types/webpack-bundle-analyzer": "^2.13.1",
|
||||||
"@types/webpack-dev-middleware": "^2.0.2",
|
"@types/webpack-dev-middleware": "^2.0.2",
|
||||||
"@types/webpack-hot-middleware": "^2.16.5",
|
"@types/webpack-hot-middleware": "^2.16.5",
|
||||||
"fork-ts-checker-webpack-plugin": "^1.0.0",
|
"consola": "^2.5.8",
|
||||||
|
"fork-ts-checker-webpack-plugin": "^1.0.1",
|
||||||
"fs-extra": "^7.0.1",
|
"fs-extra": "^7.0.1",
|
||||||
"lodash": "^4.17.11",
|
|
||||||
"ts-loader": "^5.3.3",
|
"ts-loader": "^5.3.3",
|
||||||
"ts-node": "^8.0.3",
|
"typescript": "^3.4.1"
|
||||||
"typescript": "^3.3.4000"
|
|
||||||
},
|
},
|
||||||
"publishConfig": {
|
"publishConfig": {
|
||||||
"access": "public"
|
"access": "public"
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import { readJSON, writeJSON } from 'fs-extra'
|
import { exists, readFile, writeJSON } from 'fs-extra'
|
||||||
import { register } from 'ts-node'
|
import consola from 'consola'
|
||||||
import defaultsDeep from 'lodash/defaultsDeep'
|
|
||||||
|
|
||||||
export const defaultTsJsonConfig = {
|
export const defaultTsJsonConfig = {
|
||||||
compilerOptions: {
|
compilerOptions: {
|
||||||
@ -35,23 +34,15 @@ export const defaultTsJsonConfig = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let _setup = false
|
export async function setupDefaults(tsConfigPath) {
|
||||||
|
let contents = ''
|
||||||
|
|
||||||
export async function setup(tsConfigPath, options = {}) {
|
if (await exists(tsConfigPath)) {
|
||||||
if (_setup) {
|
contents = await readFile(tsConfigPath, 'utf-8')
|
||||||
return
|
|
||||||
}
|
}
|
||||||
_setup = true
|
|
||||||
|
|
||||||
const config = await readJSON(tsConfigPath)
|
if (!contents || contents === '{}') {
|
||||||
await writeJSON(tsConfigPath, defaultsDeep(config, defaultTsJsonConfig), { spaces: 2 })
|
consola.info(`Generating ${tsConfigPath.replace(process.cwd(), '')}`)
|
||||||
|
await writeJSON(tsConfigPath, defaultTsJsonConfig, { spaces: 2 })
|
||||||
// https://github.com/TypeStrong/ts-node
|
}
|
||||||
register({
|
|
||||||
project: tsConfigPath,
|
|
||||||
compilerOptions: {
|
|
||||||
module: 'commonjs'
|
|
||||||
},
|
|
||||||
...options
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
@ -1,40 +1,31 @@
|
|||||||
import { resolve } from 'path'
|
import { resolve } from 'path'
|
||||||
import { mkdirp, readJSON, remove, writeJSON } from 'fs-extra'
|
import { mkdirp, readJSON, writeFile, remove, readFile } from 'fs-extra'
|
||||||
import { register } from 'ts-node'
|
import { defaultTsJsonConfig, setupDefaults } from '@nuxt/typescript'
|
||||||
import { defaultTsJsonConfig, setup as setupTypeScript } from '@nuxt/typescript'
|
|
||||||
|
|
||||||
jest.mock('ts-node')
|
|
||||||
|
|
||||||
describe('typescript setup', () => {
|
describe('typescript setup', () => {
|
||||||
const rootDir = 'tmp'
|
const rootDir = 'tmp'
|
||||||
const tsConfigPath = resolve(rootDir, 'tsconfig.json')
|
const tsConfigPath = resolve(rootDir, 'tsconfig.json')
|
||||||
|
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
// We're assuming that rootDir provided to setupTypeScript is existing so we create the tested one
|
|
||||||
await mkdirp(rootDir)
|
await mkdirp(rootDir)
|
||||||
await writeJSON(tsConfigPath, {})
|
await writeFile(tsConfigPath, '{}', 'utf-8')
|
||||||
await setupTypeScript(tsConfigPath)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
test('tsconfig.json has been updated with defaults', async () => {
|
test('Create tsconfig.json with defaults', async () => {
|
||||||
|
await setupDefaults(tsConfigPath)
|
||||||
expect(await readJSON(tsConfigPath)).toEqual(defaultTsJsonConfig)
|
expect(await readJSON(tsConfigPath)).toEqual(defaultTsJsonConfig)
|
||||||
})
|
})
|
||||||
|
|
||||||
test('ts-node has been registered once', async () => {
|
test('Do not override tsconfig.json', async () => {
|
||||||
// Call setupTypeScript a second time to test guard
|
const fooJSON = '{ "foo": 123 }'
|
||||||
await setupTypeScript(tsConfigPath)
|
await writeFile(tsConfigPath, fooJSON, 'utf-8')
|
||||||
|
|
||||||
expect(register).toHaveBeenCalledTimes(1)
|
await setupDefaults(tsConfigPath)
|
||||||
expect(register).toHaveBeenCalledWith({
|
|
||||||
project: tsConfigPath,
|
expect(await readFile(tsConfigPath, 'utf-8')).toEqual(fooJSON)
|
||||||
compilerOptions: {
|
|
||||||
module: 'commonjs'
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
|
||||||
afterAll(async () => {
|
afterAll(async () => {
|
||||||
// Clean workspace by removing the temporary folder (and the generated tsconfig.json at the same time)
|
|
||||||
await remove(rootDir)
|
await remove(rootDir)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -3,6 +3,17 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
# [2.6.0](https://github.com/nuxt/nuxt.js/compare/v2.5.1...v2.6.0) (2019-04-04)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **cli:** catch all possible errors thrown from proper-filelock ([#5347](https://github.com/nuxt/nuxt.js/issues/5347)) ([39bbe46](https://github.com/nuxt/nuxt.js/commit/39bbe46))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nuxt/utils",
|
"name": "@nuxt/utils",
|
||||||
"version": "2.5.1",
|
"version": "2.6.0",
|
||||||
"repository": "nuxt/nuxt.js",
|
"repository": "nuxt/nuxt.js",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"files": [
|
"files": [
|
||||||
@ -8,10 +8,10 @@
|
|||||||
],
|
],
|
||||||
"main": "dist/utils.js",
|
"main": "dist/utils.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"consola": "^2.5.7",
|
"consola": "^2.5.8",
|
||||||
"fs-extra": "^7.0.1",
|
"fs-extra": "^7.0.1",
|
||||||
"hash-sum": "^1.0.2",
|
"hash-sum": "^1.0.2",
|
||||||
"proper-lockfile": "^4.1.0",
|
"proper-lockfile": "^4.1.1",
|
||||||
"serialize-javascript": "^1.6.1",
|
"serialize-javascript": "^1.6.1",
|
||||||
"signal-exit": "^3.0.2"
|
"signal-exit": "^3.0.2"
|
||||||
},
|
},
|
||||||
|
@ -35,16 +35,33 @@ export async function getLockPath(config) {
|
|||||||
export async function lock({ id, dir, root, options }) {
|
export async function lock({ id, dir, root, options }) {
|
||||||
const lockPath = await getLockPath({ id, dir, root })
|
const lockPath = await getLockPath({ id, dir, root })
|
||||||
|
|
||||||
const locked = await properlock.check(lockPath)
|
try {
|
||||||
if (locked) {
|
const locked = await properlock.check(lockPath)
|
||||||
consola.fatal(`A lock with id '${id}' already exists on ${dir}`)
|
if (locked) {
|
||||||
|
consola.fatal(`A lock with id '${id}' already exists on ${dir}`)
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
consola.debug(`Check for an existing lock with id '${id}' on ${dir} failed`, e)
|
||||||
}
|
}
|
||||||
|
|
||||||
options = getLockOptions(options)
|
let lockWasCompromised = false
|
||||||
const release = await properlock.lock(lockPath, options)
|
let release
|
||||||
|
|
||||||
|
try {
|
||||||
|
options = getLockOptions(options)
|
||||||
|
|
||||||
|
const onCompromised = options.onCompromised
|
||||||
|
options.onCompromised = (err) => {
|
||||||
|
onCompromised(err)
|
||||||
|
lockWasCompromised = true
|
||||||
|
}
|
||||||
|
|
||||||
|
release = await properlock.lock(lockPath, options)
|
||||||
|
} catch (e) {}
|
||||||
|
|
||||||
if (!release) {
|
if (!release) {
|
||||||
consola.warn(`Unable to get a lock with id '${id}' on ${dir} (but will continue)`)
|
consola.warn(`Unable to get a lock with id '${id}' on ${dir} (but will continue)`)
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!lockPaths.size) {
|
if (!lockPaths.size) {
|
||||||
@ -59,8 +76,27 @@ export async function lock({ id, dir, root, options }) {
|
|||||||
lockPaths.add(lockPath)
|
lockPaths.add(lockPath)
|
||||||
|
|
||||||
return async function lockRelease() {
|
return async function lockRelease() {
|
||||||
await release()
|
try {
|
||||||
await fs.remove(lockPath)
|
await fs.remove(lockPath)
|
||||||
lockPaths.delete(lockPath)
|
lockPaths.delete(lockPath)
|
||||||
|
|
||||||
|
// release as last so the lockPath is still removed
|
||||||
|
// when it fails on a compromised lock
|
||||||
|
await release()
|
||||||
|
} catch (e) {
|
||||||
|
if (!lockWasCompromised || !e.message.includes('already released')) {
|
||||||
|
consola.debug(e)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// proper-lockfile doesnt remove lockDir when lock is compromised
|
||||||
|
// removing it here could cause the 'other' process to throw an error
|
||||||
|
// as well, but in our case its much more likely the lock was
|
||||||
|
// compromised due to mtime update timeouts
|
||||||
|
const lockDir = `${lockPath}.lock`
|
||||||
|
if (await fs.exists(lockDir)) {
|
||||||
|
await fs.remove(lockDir)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,7 @@ describe('util: locking', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
test('lock creates a lock and returns a release fn', async () => {
|
test('lock creates a lock and returns a release fn', async () => {
|
||||||
properlock.lock.mockImplementationOnce(() => true)
|
properlock.lock.mockReturnValue(true)
|
||||||
|
|
||||||
const fn = await lock(lockConfig)
|
const fn = await lock(lockConfig)
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ describe('util: locking', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
test('lock throws error when lock already exists', async () => {
|
test('lock throws error when lock already exists', async () => {
|
||||||
properlock.check.mockImplementationOnce(() => true)
|
properlock.check.mockReturnValue(true)
|
||||||
|
|
||||||
await lock(lockConfig)
|
await lock(lockConfig)
|
||||||
expect(properlock.check).toHaveBeenCalledTimes(1)
|
expect(properlock.check).toHaveBeenCalledTimes(1)
|
||||||
@ -84,7 +84,19 @@ describe('util: locking', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
test('lock logs warning when it couldnt get a lock', async () => {
|
test('lock logs warning when it couldnt get a lock', async () => {
|
||||||
properlock.lock.mockImplementationOnce(() => false)
|
properlock.lock.mockReturnValue(false)
|
||||||
|
|
||||||
|
const fn = await lock(lockConfig)
|
||||||
|
expect(fn).toBe(false)
|
||||||
|
expect(properlock.lock).toHaveBeenCalledTimes(1)
|
||||||
|
expect(consola.warn).toHaveBeenCalledTimes(1)
|
||||||
|
expect(consola.warn).toHaveBeenCalledWith(`Unable to get a lock with id '${lockConfig.id}' on ${lockConfig.dir} (but will continue)`)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('lock logs warning when proper.lock threw error', async () => {
|
||||||
|
properlock.lock.mockImplementation(() => {
|
||||||
|
throw new Error('test error')
|
||||||
|
})
|
||||||
|
|
||||||
await lock(lockConfig)
|
await lock(lockConfig)
|
||||||
expect(properlock.lock).toHaveBeenCalledTimes(1)
|
expect(properlock.lock).toHaveBeenCalledTimes(1)
|
||||||
@ -94,7 +106,7 @@ describe('util: locking', () => {
|
|||||||
|
|
||||||
test('lock returns a release method for unlocking both lockfile as lockPath', async () => {
|
test('lock returns a release method for unlocking both lockfile as lockPath', async () => {
|
||||||
const release = jest.fn()
|
const release = jest.fn()
|
||||||
properlock.lock.mockImplementationOnce(() => release)
|
properlock.lock.mockImplementation(() => release)
|
||||||
|
|
||||||
const fn = await lock(lockConfig)
|
const fn = await lock(lockConfig)
|
||||||
await fn()
|
await fn()
|
||||||
@ -105,7 +117,7 @@ describe('util: locking', () => {
|
|||||||
|
|
||||||
test('lock release also cleansup onExit set', async () => {
|
test('lock release also cleansup onExit set', async () => {
|
||||||
const release = jest.fn()
|
const release = jest.fn()
|
||||||
properlock.lock.mockImplementationOnce(() => release)
|
properlock.lock.mockImplementation(() => release)
|
||||||
|
|
||||||
const fn = await lock(lockConfig)
|
const fn = await lock(lockConfig)
|
||||||
expect(lockPaths.size).toBe(1)
|
expect(lockPaths.size).toBe(1)
|
||||||
@ -114,8 +126,58 @@ describe('util: locking', () => {
|
|||||||
expect(lockPaths.size).toBe(0)
|
expect(lockPaths.size).toBe(0)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('lock release only logs error when error thrown', async () => {
|
||||||
|
const release = jest.fn(() => {
|
||||||
|
throw new Error('test error')
|
||||||
|
})
|
||||||
|
properlock.lock.mockImplementation(() => release)
|
||||||
|
|
||||||
|
const fn = await lock(lockConfig)
|
||||||
|
await expect(fn()).resolves.not.toThrow()
|
||||||
|
|
||||||
|
expect(consola.debug).toHaveBeenCalledTimes(1)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('lock check only logs error when error thrown', async () => {
|
||||||
|
const testError = new Error('check error')
|
||||||
|
properlock.lock.mockImplementation(() => () => {})
|
||||||
|
properlock.check.mockImplementation(() => {
|
||||||
|
throw testError
|
||||||
|
})
|
||||||
|
|
||||||
|
const fn = await lock(lockConfig)
|
||||||
|
expect(fn).toEqual(expect.any(Function))
|
||||||
|
|
||||||
|
expect(consola.debug).toHaveBeenCalledTimes(1)
|
||||||
|
expect(consola.debug).toHaveBeenCalledWith(`Check for an existing lock with id '${lockConfig.id}' on ${lockConfig.dir} failed`, testError)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('lock release doesnt log error when error thrown because lock compromised', async () => {
|
||||||
|
fs.exists.mockReturnValue(true)
|
||||||
|
const testError = new Error('Lock is already released')
|
||||||
|
const release = jest.fn(() => {
|
||||||
|
throw testError
|
||||||
|
})
|
||||||
|
|
||||||
|
properlock.lock.mockImplementation((path, options) => {
|
||||||
|
options.onCompromised()
|
||||||
|
return release
|
||||||
|
})
|
||||||
|
|
||||||
|
const fn = await lock({
|
||||||
|
...lockConfig,
|
||||||
|
options: {
|
||||||
|
// overwrite default compromised which calls consola.warn
|
||||||
|
onCompromised() {}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
await expect(fn()).resolves.not.toThrow()
|
||||||
|
expect(consola.warn).not.toHaveBeenCalled()
|
||||||
|
})
|
||||||
|
|
||||||
test('lock sets exit listener once to remove lockPaths', async () => {
|
test('lock sets exit listener once to remove lockPaths', async () => {
|
||||||
properlock.lock.mockImplementationOnce(() => true)
|
properlock.lock.mockReturnValue(true)
|
||||||
|
|
||||||
await lock(lockConfig)
|
await lock(lockConfig)
|
||||||
await lock(lockConfig)
|
await lock(lockConfig)
|
||||||
@ -124,8 +186,10 @@ describe('util: locking', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
test('exit listener removes all lockPaths when called', async () => {
|
test('exit listener removes all lockPaths when called', async () => {
|
||||||
|
properlock.lock.mockReturnValue(true)
|
||||||
|
|
||||||
let callback
|
let callback
|
||||||
onExit.mockImplementationOnce(cb => (callback = cb))
|
onExit.mockImplementation(cb => (callback = cb))
|
||||||
|
|
||||||
const lockConfig2 = Object.assign({}, lockConfig, { id: 'id2' })
|
const lockConfig2 = Object.assign({}, lockConfig, { id: 'id2' })
|
||||||
|
|
||||||
@ -145,7 +209,7 @@ describe('util: locking', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
test('lock uses setLockOptions to set defaults', async () => {
|
test('lock uses setLockOptions to set defaults', async () => {
|
||||||
const spy = properlock.lock.mockImplementationOnce(() => true)
|
const spy = properlock.lock.mockReturnValue(true)
|
||||||
|
|
||||||
await lock(lockConfig)
|
await lock(lockConfig)
|
||||||
|
|
||||||
|
@ -3,6 +3,24 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
# [2.6.0](https://github.com/nuxt/nuxt.js/compare/v2.5.1...v2.6.0) (2019-04-04)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **vue-app:** decode uri in `getlocation` ([#5337](https://github.com/nuxt/nuxt.js/issues/5337)) ([77dcfe6](https://github.com/nuxt/nuxt.js/commit/77dcfe6))
|
||||||
|
* **vue-app:** prevent mounting page twice on redirect ([#5361](https://github.com/nuxt/nuxt.js/issues/5361)) ([2d73e8a](https://github.com/nuxt/nuxt.js/commit/2d73e8a))
|
||||||
|
* fail in case of missing core-js dependency ([#5342](https://github.com/nuxt/nuxt.js/issues/5342)) ([439b914](https://github.com/nuxt/nuxt.js/commit/439b914))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **babel-preset-app:** support specifying core-js version ([#5411](https://github.com/nuxt/nuxt.js/issues/5411)) ([159123f](https://github.com/nuxt/nuxt.js/commit/159123f))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
||||||
|
|
||||||
**Note:** Version bump only for package @nuxt/vue-app
|
**Note:** Version bump only for package @nuxt/vue-app
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nuxt/vue-app",
|
"name": "@nuxt/vue-app",
|
||||||
"version": "2.5.1",
|
"version": "2.6.0",
|
||||||
"repository": "nuxt/nuxt.js",
|
"repository": "nuxt/nuxt.js",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"files": [
|
"files": [
|
||||||
@ -15,7 +15,7 @@
|
|||||||
"node-fetch": "^2.3.0",
|
"node-fetch": "^2.3.0",
|
||||||
"unfetch": "^4.1.0",
|
"unfetch": "^4.1.0",
|
||||||
"vue": "^2.6.10",
|
"vue": "^2.6.10",
|
||||||
"vue-meta": "^1.5.8",
|
"vue-meta": "^1.6.0",
|
||||||
"vue-no-ssr": "^1.1.1",
|
"vue-no-ssr": "^1.1.1",
|
||||||
"vue-router": "^3.0.2",
|
"vue-router": "^3.0.2",
|
||||||
"vue-template-compiler": "^2.6.10",
|
"vue-template-compiler": "^2.6.10",
|
||||||
|
@ -649,6 +649,10 @@ async function mountApp(__app) {
|
|||||||
const mount = () => {
|
const mount = () => {
|
||||||
_app.$mount('#<%= globals.id %>')
|
_app.$mount('#<%= globals.id %>')
|
||||||
|
|
||||||
|
// Add afterEach router hooks
|
||||||
|
router.afterEach(normalizeComponents)
|
||||||
|
router.afterEach(fixPrepatch.bind(_app))
|
||||||
|
|
||||||
// Listen for first Vue update
|
// Listen for first Vue update
|
||||||
Vue.nextTick(() => {
|
Vue.nextTick(() => {
|
||||||
// Call window.{{globals.readyCallback}} callbacks
|
// Call window.{{globals.readyCallback}} callbacks
|
||||||
@ -671,11 +675,9 @@ async function mountApp(__app) {
|
|||||||
_app.$loading = {} // To avoid error while _app.$nuxt does not exist
|
_app.$loading = {} // To avoid error while _app.$nuxt does not exist
|
||||||
if (NUXT.error) _app.error(NUXT.error)
|
if (NUXT.error) _app.error(NUXT.error)
|
||||||
|
|
||||||
// Add router hooks
|
// Add beforeEach router hooks
|
||||||
router.beforeEach(loadAsyncComponents.bind(_app))
|
router.beforeEach(loadAsyncComponents.bind(_app))
|
||||||
router.beforeEach(render.bind(_app))
|
router.beforeEach(render.bind(_app))
|
||||||
router.afterEach(normalizeComponents)
|
|
||||||
router.afterEach(fixPrepatch.bind(_app))
|
|
||||||
|
|
||||||
// If page already is server rendered
|
// If page already is server rendered
|
||||||
if (NUXT.serverRendered) {
|
if (NUXT.serverRendered) {
|
||||||
@ -684,20 +686,30 @@ async function mountApp(__app) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// First render on client-side
|
// First render on client-side
|
||||||
|
const clientFirstMount = () => {
|
||||||
|
normalizeComponents(router.currentRoute, router.currentRoute)
|
||||||
|
showNextPage.call(_app, router.currentRoute)
|
||||||
|
// Don't call fixPrepatch.call(_app, router.currentRoute, router.currentRoute) since it's first render
|
||||||
|
mount()
|
||||||
|
}
|
||||||
|
|
||||||
render.call(_app, router.currentRoute, router.currentRoute, (path) => {
|
render.call(_app, router.currentRoute, router.currentRoute, (path) => {
|
||||||
// If not redirected
|
// If not redirected
|
||||||
if (!path) {
|
if (!path) {
|
||||||
normalizeComponents(router.currentRoute, router.currentRoute)
|
clientFirstMount()
|
||||||
showNextPage.call(_app, router.currentRoute)
|
|
||||||
// Don't call fixPrepatch.call(_app, router.currentRoute, router.currentRoute) since it's first render
|
|
||||||
mount()
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Push the path and then mount app
|
// Add a one-time afterEach hook to
|
||||||
router.push(path, () => mount(), (err) => {
|
// mount the app wait for redirect and route gets resolved
|
||||||
if (!err) return mount()
|
const unregisterHook = router.afterEach((to, from) => {
|
||||||
errorHandler(err)
|
unregisterHook()
|
||||||
|
clientFirstMount()
|
||||||
|
})
|
||||||
|
|
||||||
|
// Push the path and let route to be resolved
|
||||||
|
router.push(path, undefined, (err) => {
|
||||||
|
if (err) errorHandler(err)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -259,14 +259,14 @@ export function promisify(fn, context) {
|
|||||||
|
|
||||||
// Imported from vue-router
|
// Imported from vue-router
|
||||||
export function getLocation(base, mode) {
|
export function getLocation(base, mode) {
|
||||||
let path = window.location.pathname
|
let path = decodeURI(window.location.pathname)
|
||||||
if (mode === 'hash') {
|
if (mode === 'hash') {
|
||||||
return window.location.hash.replace(/^#\//, '')
|
return window.location.hash.replace(/^#\//, '')
|
||||||
}
|
}
|
||||||
if (base && path.indexOf(base) === 0) {
|
if (base && path.indexOf(base) === 0) {
|
||||||
path = path.slice(base.length)
|
path = path.slice(base.length)
|
||||||
}
|
}
|
||||||
return decodeURI(path || '/') + window.location.search + window.location.hash
|
return (path || '/') + window.location.search + window.location.hash
|
||||||
}
|
}
|
||||||
|
|
||||||
export function urlJoin() {
|
export function urlJoin() {
|
||||||
|
@ -3,6 +3,24 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
# [2.6.0](https://github.com/nuxt/nuxt.js/compare/v2.5.1...v2.6.0) (2019-04-04)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **builder:** await for renderer to load resources ([#5341](https://github.com/nuxt/nuxt.js/issues/5341)) ([caf5198](https://github.com/nuxt/nuxt.js/commit/caf5198))
|
||||||
|
* **renderer:** retry render if renderer is in loading or created state ([#5417](https://github.com/nuxt/nuxt.js/issues/5417)) ([8b99695](https://github.com/nuxt/nuxt.js/commit/8b99695))
|
||||||
|
* **vue-renderer:** add the csp hash if `unsafe-inline` hasn't been specified ([#5387](https://github.com/nuxt/nuxt.js/issues/5387)) ([97db6a4](https://github.com/nuxt/nuxt.js/commit/97db6a4))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **vue-renderer:** add csp meta tags ([#5354](https://github.com/nuxt/nuxt.js/issues/5354)) ([b978a37](https://github.com/nuxt/nuxt.js/commit/b978a37))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
||||||
|
|
||||||
**Note:** Version bump only for package @nuxt/vue-renderer
|
**Note:** Version bump only for package @nuxt/vue-renderer
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nuxt/vue-renderer",
|
"name": "@nuxt/vue-renderer",
|
||||||
"version": "2.5.1",
|
"version": "2.6.0",
|
||||||
"repository": "nuxt/nuxt.js",
|
"repository": "nuxt/nuxt.js",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"files": [
|
"files": [
|
||||||
@ -9,12 +9,12 @@
|
|||||||
"main": "dist/vue-renderer.js",
|
"main": "dist/vue-renderer.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxt/devalue": "^1.2.2",
|
"@nuxt/devalue": "^1.2.2",
|
||||||
"@nuxt/utils": "2.5.1",
|
"@nuxt/utils": "2.6.0",
|
||||||
"consola": "^2.5.7",
|
"consola": "^2.5.8",
|
||||||
"fs-extra": "^7.0.1",
|
"fs-extra": "^7.0.1",
|
||||||
"lru-cache": "^5.1.1",
|
"lru-cache": "^5.1.1",
|
||||||
"vue": "^2.6.10",
|
"vue": "^2.6.10",
|
||||||
"vue-meta": "^1.5.8",
|
"vue-meta": "^1.6.0",
|
||||||
"vue-server-renderer": "^2.6.10"
|
"vue-server-renderer": "^2.6.10"
|
||||||
},
|
},
|
||||||
"publishConfig": {
|
"publishConfig": {
|
||||||
|
@ -33,6 +33,10 @@ export default class VueRenderer {
|
|||||||
spaTemplate: undefined,
|
spaTemplate: undefined,
|
||||||
errorTemplate: this.parseTemplate('Nuxt.js Internal Server Error')
|
errorTemplate: this.parseTemplate('Nuxt.js Internal Server Error')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Default status
|
||||||
|
this._state = 'created'
|
||||||
|
this._error = null
|
||||||
}
|
}
|
||||||
|
|
||||||
get assetsMapping() {
|
get assetsMapping() {
|
||||||
@ -120,12 +124,25 @@ export default class VueRenderer {
|
|||||||
return context.renderResourceHints()
|
return context.renderResourceHints()
|
||||||
}
|
}
|
||||||
|
|
||||||
async ready() {
|
ready() {
|
||||||
if (this._readyCalled) {
|
if (!this._readyPromise) {
|
||||||
return this
|
this._state = 'loading'
|
||||||
|
this._readyPromise = this._ready()
|
||||||
|
.then(() => {
|
||||||
|
this._state = 'ready'
|
||||||
|
return this
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
this._state = 'error'
|
||||||
|
this._error = error
|
||||||
|
throw error
|
||||||
|
})
|
||||||
}
|
}
|
||||||
this._readyCalled = true
|
|
||||||
|
|
||||||
|
return this._readyPromise
|
||||||
|
}
|
||||||
|
|
||||||
|
async _ready() {
|
||||||
// Resolve dist path
|
// Resolve dist path
|
||||||
this.distPath = path.resolve(this.context.options.buildDir, 'dist', 'server')
|
this.distPath = path.resolve(this.context.options.buildDir, 'dist', 'server')
|
||||||
|
|
||||||
@ -140,7 +157,7 @@ export default class VueRenderer {
|
|||||||
// Try once to load SSR resources from fs
|
// Try once to load SSR resources from fs
|
||||||
await this.loadResources(fs)
|
await this.loadResources(fs)
|
||||||
|
|
||||||
// Without using `nuxt start` (Programmatic, Tests and Generate)
|
// Without using `nuxt start` (programmatic, tests and generate)
|
||||||
if (!this.context.options._start) {
|
if (!this.context.options._start) {
|
||||||
this.context.nuxt.hook('build:resources', () => this.loadResources(fs))
|
this.context.nuxt.hook('build:resources', () => this.loadResources(fs))
|
||||||
return
|
return
|
||||||
@ -156,8 +173,6 @@ export default class VueRenderer {
|
|||||||
`No build files found in ${this.distPath}.\nUse either \`nuxt build\` or \`builder.build()\` or start nuxt in development mode.`
|
`No build files found in ${this.distPath}.\nUse either \`nuxt build\` or \`builder.build()\` or start nuxt in development mode.`
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
return this
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async loadResources(_fs) {
|
async loadResources(_fs) {
|
||||||
@ -186,7 +201,6 @@ export default class VueRenderer {
|
|||||||
|
|
||||||
// Skip unavailable resources
|
// Skip unavailable resources
|
||||||
if (!resource) {
|
if (!resource) {
|
||||||
consola.debug('Resource not available:', resourceName)
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -212,9 +226,6 @@ export default class VueRenderer {
|
|||||||
this.createRenderer()
|
this.createRenderer()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Call resourcesLoaded hook
|
|
||||||
consola.debug('Resources loaded:', updated.join(','))
|
|
||||||
|
|
||||||
return this.context.nuxt.callHook('render:resourcesLoaded', this.context.resources)
|
return this.context.nuxt.callHook('render:resourcesLoaded', this.context.resources)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -396,16 +407,25 @@ export default class VueRenderer {
|
|||||||
APP += `<script>${serializedSession}</script>`
|
APP += `<script>${serializedSession}</script>`
|
||||||
|
|
||||||
// Calculate CSP hashes
|
// Calculate CSP hashes
|
||||||
|
const { csp } = this.context.options.render
|
||||||
const cspScriptSrcHashes = []
|
const cspScriptSrcHashes = []
|
||||||
if (this.context.options.render.csp) {
|
if (csp) {
|
||||||
const { hashAlgorithm } = this.context.options.render.csp
|
// Only add the hash if 'unsafe-inline' rule isn't present to avoid conflicts (#5387)
|
||||||
const hash = crypto.createHash(hashAlgorithm)
|
const containsUnsafeInlineScriptSrc = csp.policies && csp.policies['script-src'] && csp.policies['script-src'].includes(`'unsafe-inline'`)
|
||||||
hash.update(serializedSession)
|
if (!containsUnsafeInlineScriptSrc) {
|
||||||
cspScriptSrcHashes.push(`'${hashAlgorithm}-${hash.digest('base64')}'`)
|
const hash = crypto.createHash(csp.hashAlgorithm)
|
||||||
}
|
hash.update(serializedSession)
|
||||||
|
cspScriptSrcHashes.push(`'${csp.hashAlgorithm}-${hash.digest('base64')}'`)
|
||||||
|
}
|
||||||
|
|
||||||
// Call ssr:csp hook
|
// Call ssr:csp hook
|
||||||
await this.context.nuxt.callHook('vue-renderer:ssr:csp', cspScriptSrcHashes)
|
await this.context.nuxt.callHook('vue-renderer:ssr:csp', cspScriptSrcHashes)
|
||||||
|
|
||||||
|
// Add csp meta tags
|
||||||
|
if (csp.addMeta) {
|
||||||
|
HEAD += `<meta http-equiv="Content-Security-Policy" content="script-src ${cspScriptSrcHashes.join()}">`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Prepend scripts
|
// Prepend scripts
|
||||||
APP += this.renderScripts(context)
|
APP += this.renderScripts(context)
|
||||||
@ -437,23 +457,27 @@ export default class VueRenderer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_throwNotReadyError() {
|
async renderRoute(url, context = {}, _retried) {
|
||||||
const error = new Error()
|
|
||||||
|
|
||||||
error.statusCode = 500
|
|
||||||
if (!this._readyCalled) {
|
|
||||||
error.message = 'Nuxt is not initialized! `nuxt.ready()` should be called.'
|
|
||||||
} else {
|
|
||||||
error.message = `SSR renderer is not initialized! Please check ${this.distPath} existence.`
|
|
||||||
}
|
|
||||||
throw error
|
|
||||||
}
|
|
||||||
|
|
||||||
async renderRoute(url, context = {}) {
|
|
||||||
/* istanbul ignore if */
|
/* istanbul ignore if */
|
||||||
if (!this.isReady) {
|
if (!this.isReady) {
|
||||||
|
// Production
|
||||||
if (!this.context.options.dev) {
|
if (!this.context.options.dev) {
|
||||||
return this._throwNotReadyError()
|
if (!_retried && ['loading', 'created'].includes(this._state)) {
|
||||||
|
await this.ready()
|
||||||
|
return this.renderRoute(url, context, true)
|
||||||
|
}
|
||||||
|
switch (this._state) {
|
||||||
|
case 'created':
|
||||||
|
throw new Error('Renderer ready() is not called! Please ensure `nuxt.ready()` is called and awaited.')
|
||||||
|
case 'loading':
|
||||||
|
throw new Error(`Renderer is loading.`)
|
||||||
|
case 'error':
|
||||||
|
throw this._error
|
||||||
|
case 'ready':
|
||||||
|
throw new Error(`Renderer is loaded but not all resources are unavailable! Please check ${this.distPath} existence.`)
|
||||||
|
default:
|
||||||
|
throw new Error('Renderer is in unknown state!')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Tell nuxt middleware to render UI
|
// Tell nuxt middleware to render UI
|
||||||
return false
|
return false
|
||||||
|
@ -3,6 +3,22 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
# [2.6.0](https://github.com/nuxt/nuxt.js/compare/v2.5.1...v2.6.0) (2019-04-04)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* revert node-externals disabling in dev mode ([#5452](https://github.com/nuxt/nuxt.js/issues/5452)) ([6ce99d2](https://github.com/nuxt/nuxt.js/commit/6ce99d2))
|
||||||
|
* **webpack:** prefer `main` over `module` field for server config ([#5446](https://github.com/nuxt/nuxt.js/issues/5446)) ([e155ea4](https://github.com/nuxt/nuxt.js/commit/e155ea4))
|
||||||
|
* disable `node-externals` for dev mode ([#5414](https://github.com/nuxt/nuxt.js/issues/5414)) ([a5a1657](https://github.com/nuxt/nuxt.js/commit/a5a1657))
|
||||||
|
* memory leak in dev mode ([#5399](https://github.com/nuxt/nuxt.js/issues/5399)) ([04ddcac](https://github.com/nuxt/nuxt.js/commit/04ddcac))
|
||||||
|
* not override externals set by build.extend ([#5444](https://github.com/nuxt/nuxt.js/issues/5444)) ([1ae4333](https://github.com/nuxt/nuxt.js/commit/1ae4333))
|
||||||
|
* **builder:** await for renderer to load resources ([#5341](https://github.com/nuxt/nuxt.js/issues/5341)) ([caf5198](https://github.com/nuxt/nuxt.js/commit/caf5198))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
## [2.5.1](https://github.com/nuxt/nuxt.js/compare/v2.5.0...v2.5.1) (2019-03-21)
|
||||||
|
|
||||||
**Note:** Version bump only for package @nuxt/webpack
|
**Note:** Version bump only for package @nuxt/webpack
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nuxt/webpack",
|
"name": "@nuxt/webpack",
|
||||||
"version": "2.5.1",
|
"version": "2.6.0",
|
||||||
"repository": "nuxt/nuxt.js",
|
"repository": "nuxt/nuxt.js",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"files": [
|
"files": [
|
||||||
@ -8,19 +8,19 @@
|
|||||||
],
|
],
|
||||||
"main": "dist/webpack.js",
|
"main": "dist/webpack.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/core": "^7.4.0",
|
"@babel/core": "^7.4.3",
|
||||||
"@nuxt/babel-preset-app": "2.5.1",
|
"@nuxt/babel-preset-app": "2.6.0",
|
||||||
"@nuxt/friendly-errors-webpack-plugin": "^2.4.0",
|
"@nuxt/friendly-errors-webpack-plugin": "^2.4.0",
|
||||||
"@nuxt/utils": "2.5.1",
|
"@nuxt/utils": "2.6.0",
|
||||||
"babel-loader": "^8.0.5",
|
"babel-loader": "^8.0.5",
|
||||||
"cache-loader": "^2.0.1",
|
"cache-loader": "^2.0.1",
|
||||||
"caniuse-lite": "^1.0.30000951",
|
"caniuse-lite": "^1.0.30000957",
|
||||||
"chalk": "^2.4.2",
|
"chalk": "^2.4.2",
|
||||||
"consola": "^2.5.7",
|
"consola": "^2.5.8",
|
||||||
"css-loader": "^2.1.1",
|
"css-loader": "^2.1.1",
|
||||||
"cssnano": "^4.1.10",
|
"cssnano": "^4.1.10",
|
||||||
"eventsource-polyfill": "^0.9.6",
|
"eventsource-polyfill": "^0.9.6",
|
||||||
"extract-css-chunks-webpack-plugin": "^4.0.1",
|
"extract-css-chunks-webpack-plugin": "^4.3.0",
|
||||||
"file-loader": "^3.0.1",
|
"file-loader": "^3.0.1",
|
||||||
"fs-extra": "^7.0.1",
|
"fs-extra": "^7.0.1",
|
||||||
"glob": "^7.1.3",
|
"glob": "^7.1.3",
|
||||||
@ -32,7 +32,7 @@
|
|||||||
"pify": "^4.0.1",
|
"pify": "^4.0.1",
|
||||||
"postcss": "^7.0.14",
|
"postcss": "^7.0.14",
|
||||||
"postcss-import": "^12.0.1",
|
"postcss-import": "^12.0.1",
|
||||||
"postcss-import-resolver": "^1.1.0",
|
"postcss-import-resolver": "^1.2.2",
|
||||||
"postcss-loader": "^3.0.0",
|
"postcss-loader": "^3.0.0",
|
||||||
"postcss-preset-env": "^6.6.0",
|
"postcss-preset-env": "^6.6.0",
|
||||||
"postcss-url": "^8.0.0",
|
"postcss-url": "^8.0.0",
|
||||||
@ -45,7 +45,7 @@
|
|||||||
"vue-loader": "^15.7.0",
|
"vue-loader": "^15.7.0",
|
||||||
"webpack": "^4.29.6",
|
"webpack": "^4.29.6",
|
||||||
"webpack-bundle-analyzer": "^3.1.0",
|
"webpack-bundle-analyzer": "^3.1.0",
|
||||||
"webpack-dev-middleware": "^3.6.1",
|
"webpack-dev-middleware": "^3.6.2",
|
||||||
"webpack-hot-middleware": "^2.24.3",
|
"webpack-hot-middleware": "^2.24.3",
|
||||||
"webpack-node-externals": "^1.7.2",
|
"webpack-node-externals": "^1.7.2",
|
||||||
"webpackbar": "^3.1.5"
|
"webpackbar": "^3.1.5"
|
||||||
|
@ -6,14 +6,10 @@ import webpackDevMiddleware from 'webpack-dev-middleware'
|
|||||||
import webpackHotMiddleware from 'webpack-hot-middleware'
|
import webpackHotMiddleware from 'webpack-hot-middleware'
|
||||||
import consola from 'consola'
|
import consola from 'consola'
|
||||||
|
|
||||||
import {
|
import { parallel, sequence, wrapArray } from '@nuxt/utils'
|
||||||
parallel,
|
|
||||||
sequence,
|
|
||||||
wrapArray
|
|
||||||
} from '@nuxt/utils'
|
|
||||||
import AsyncMFS from './utils/async-mfs'
|
import AsyncMFS from './utils/async-mfs'
|
||||||
|
|
||||||
import { ClientConfig, ModernConfig, ServerConfig } from './config'
|
import * as WebpackConfigs from './config'
|
||||||
import PerfLoader from './utils/perf-loader'
|
import PerfLoader from './utils/perf-loader'
|
||||||
|
|
||||||
const glob = pify(Glob)
|
const glob = pify(Glob)
|
||||||
@ -37,44 +33,28 @@ export class WebpackBundler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getWebpackConfig(name) {
|
||||||
|
const Config = WebpackConfigs[name] // eslint-disable-line import/namespace
|
||||||
|
if (!Config) {
|
||||||
|
throw new Error(`Unsupported webpack config ${name}`)
|
||||||
|
}
|
||||||
|
const config = new Config(this)
|
||||||
|
return config.config()
|
||||||
|
}
|
||||||
|
|
||||||
async build() {
|
async build() {
|
||||||
const { options } = this.buildContext
|
const { options } = this.buildContext
|
||||||
|
|
||||||
const compilersOptions = []
|
const webpackConfigs = [
|
||||||
|
this.getWebpackConfig('Client')
|
||||||
|
]
|
||||||
|
|
||||||
// Client
|
|
||||||
const clientConfig = new ClientConfig(this).config()
|
|
||||||
compilersOptions.push(clientConfig)
|
|
||||||
|
|
||||||
// Modern
|
|
||||||
let modernConfig
|
|
||||||
if (options.modern) {
|
if (options.modern) {
|
||||||
modernConfig = new ModernConfig(this).config()
|
webpackConfigs.push(this.getWebpackConfig('Modern'))
|
||||||
compilersOptions.push(modernConfig)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Server
|
|
||||||
let serverConfig = null
|
|
||||||
if (options.build.ssr) {
|
if (options.build.ssr) {
|
||||||
serverConfig = new ServerConfig(this).config()
|
webpackConfigs.push(this.getWebpackConfig('Server'))
|
||||||
compilersOptions.push(serverConfig)
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const p of this.buildContext.plugins) {
|
|
||||||
// Client config
|
|
||||||
if (!clientConfig.resolve.alias[p.name]) {
|
|
||||||
clientConfig.resolve.alias[p.name] = p.mode === 'server' ? './empty.js' : p.src
|
|
||||||
}
|
|
||||||
|
|
||||||
// Modern config
|
|
||||||
if (modernConfig && !modernConfig.resolve.alias[p.name]) {
|
|
||||||
modernConfig.resolve.alias[p.name] = p.mode === 'server' ? './empty.js' : p.src
|
|
||||||
}
|
|
||||||
|
|
||||||
// Server config
|
|
||||||
if (serverConfig && !serverConfig.resolve.alias[p.name]) {
|
|
||||||
serverConfig.resolve.alias[p.name] = p.mode === 'client' ? './empty.js' : p.src
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check styleResource existence
|
// Check styleResource existence
|
||||||
@ -96,8 +76,8 @@ export class WebpackBundler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Configure compilers
|
// Configure compilers
|
||||||
this.compilers = compilersOptions.map((compilerOptions) => {
|
this.compilers = webpackConfigs.map((config) => {
|
||||||
const compiler = webpack(compilerOptions)
|
const compiler = webpack(config)
|
||||||
|
|
||||||
// In dev, write files in memory FS
|
// In dev, write files in memory FS
|
||||||
if (options.dev) {
|
if (options.dev) {
|
||||||
@ -173,6 +153,9 @@ export class WebpackBundler {
|
|||||||
// Actual error will be printed by webpack
|
// Actual error will be printed by webpack
|
||||||
throw new Error('Nuxt Build Error')
|
throw new Error('Nuxt Build Error')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Await for renderer to load resources (programmatic, tests and generate)
|
||||||
|
await nuxt.callHook('build:resources')
|
||||||
}
|
}
|
||||||
|
|
||||||
async webpackDev(compiler) {
|
async webpackDev(compiler) {
|
||||||
|
@ -147,6 +147,22 @@ export default class WebpackBaseConfig {
|
|||||||
return optimization
|
return optimization
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resolve() {
|
||||||
|
// Prioritize nested node_modules in webpack search path (#2558)
|
||||||
|
const webpackModulesDir = ['node_modules'].concat(this.buildContext.options.modulesDir)
|
||||||
|
|
||||||
|
return {
|
||||||
|
resolve: {
|
||||||
|
extensions: ['.wasm', '.mjs', '.js', '.json', '.vue', '.jsx', '.ts', '.tsx'],
|
||||||
|
alias: this.alias(),
|
||||||
|
modules: webpackModulesDir
|
||||||
|
},
|
||||||
|
resolveLoader: {
|
||||||
|
modules: webpackModulesDir
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
minimizer() {
|
minimizer() {
|
||||||
const minimizer = []
|
const minimizer = []
|
||||||
const { terser, cache } = this.buildContext.buildOptions
|
const { terser, cache } = this.buildContext.buildOptions
|
||||||
@ -414,9 +430,6 @@ export default class WebpackBaseConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
config() {
|
config() {
|
||||||
// Prioritize nested node_modules in webpack search path (#2558)
|
|
||||||
const webpackModulesDir = ['node_modules'].concat(this.buildContext.options.modulesDir)
|
|
||||||
|
|
||||||
const config = {
|
const config = {
|
||||||
name: this.name,
|
name: this.name,
|
||||||
mode: this.mode,
|
mode: this.mode,
|
||||||
@ -427,18 +440,11 @@ export default class WebpackBaseConfig {
|
|||||||
maxEntrypointSize: 1000 * 1024,
|
maxEntrypointSize: 1000 * 1024,
|
||||||
hints: this.dev ? false : 'warning'
|
hints: this.dev ? false : 'warning'
|
||||||
},
|
},
|
||||||
resolve: {
|
|
||||||
extensions: ['.wasm', '.mjs', '.js', '.json', '.vue', '.jsx', '.ts', '.tsx'],
|
|
||||||
alias: this.alias(),
|
|
||||||
modules: webpackModulesDir
|
|
||||||
},
|
|
||||||
resolveLoader: {
|
|
||||||
modules: webpackModulesDir
|
|
||||||
},
|
|
||||||
module: {
|
module: {
|
||||||
rules: this.rules()
|
rules: this.rules()
|
||||||
},
|
},
|
||||||
plugins: this.plugins()
|
plugins: this.plugins(),
|
||||||
|
...this.resolve()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clone deep avoid leaking config between Client and Server
|
// Clone deep avoid leaking config between Client and Server
|
||||||
|
@ -74,9 +74,22 @@ export default class WebpackClientConfig extends WebpackBaseConfig {
|
|||||||
return minimizer
|
return minimizer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
alias() {
|
||||||
|
const aliases = super.alias()
|
||||||
|
|
||||||
|
for (const p of this.buildContext.plugins) {
|
||||||
|
if (!aliases[p.name]) {
|
||||||
|
// Do not load server-side plugins on client-side
|
||||||
|
aliases[p.name] = p.mode === 'server' ? './empty.js' : p.src
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return aliases
|
||||||
|
}
|
||||||
|
|
||||||
plugins() {
|
plugins() {
|
||||||
const plugins = super.plugins()
|
const plugins = super.plugins()
|
||||||
const { buildOptions, options: { appTemplatePath, buildDir, modern, rootDir, _typescript } } = this.buildContext
|
const { buildOptions, options: { appTemplatePath, buildDir, modern, rootDir, _typescript = {} } } = this.buildContext
|
||||||
|
|
||||||
// Generate output HTML for SSR
|
// Generate output HTML for SSR
|
||||||
if (buildOptions.ssr) {
|
if (buildOptions.ssr) {
|
||||||
@ -139,8 +152,7 @@ export default class WebpackClientConfig extends WebpackBaseConfig {
|
|||||||
|
|
||||||
// TypeScript type checker
|
// TypeScript type checker
|
||||||
// Only performs once per client compilation and only if `ts-loader` checker is not used (transpileOnly: true)
|
// Only performs once per client compilation and only if `ts-loader` checker is not used (transpileOnly: true)
|
||||||
if (_typescript && buildOptions.typescript && buildOptions.typescript.typeCheck && !this.isModern && this.loaders.ts.transpileOnly) {
|
if (_typescript.build && buildOptions.typescript && buildOptions.typescript.typeCheck && !this.isModern && this.loaders.ts.transpileOnly) {
|
||||||
// We assume that "_typescript" being truthy means @nuxt/typescript is installed <=> fork-ts-checker-webpack-plugin is installed
|
|
||||||
const ForkTsCheckerWebpackPlugin = require(this.buildContext.nuxt.resolver.resolveModule('fork-ts-checker-webpack-plugin'))
|
const ForkTsCheckerWebpackPlugin = require(this.buildContext.nuxt.resolver.resolveModule('fork-ts-checker-webpack-plugin'))
|
||||||
plugins.push(new ForkTsCheckerWebpackPlugin(Object.assign({
|
plugins.push(new ForkTsCheckerWebpackPlugin(Object.assign({
|
||||||
vue: true,
|
vue: true,
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
export { default as ClientConfig } from './client'
|
export { default as Client } from './client'
|
||||||
export { default as ModernConfig } from './modern'
|
export { default as Modern } from './modern'
|
||||||
export { default as ServerConfig } from './server'
|
export { default as Server } from './server'
|
||||||
|
@ -28,6 +28,7 @@ export default class WebpackServerConfig extends WebpackBaseConfig {
|
|||||||
whitelist.push(new RegExp(escapeRegExp(posixModule)))
|
whitelist.push(new RegExp(escapeRegExp(posixModule)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return whitelist
|
return whitelist
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,6 +53,27 @@ export default class WebpackServerConfig extends WebpackBaseConfig {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resolve() {
|
||||||
|
const resolveConfig = super.resolve()
|
||||||
|
|
||||||
|
resolveConfig.resolve.mainFields = ['main', 'module']
|
||||||
|
|
||||||
|
return resolveConfig
|
||||||
|
}
|
||||||
|
|
||||||
|
alias() {
|
||||||
|
const aliases = super.alias()
|
||||||
|
|
||||||
|
for (const p of this.buildContext.plugins) {
|
||||||
|
if (!aliases[p.name]) {
|
||||||
|
// Do not load client-side plugins on server-side
|
||||||
|
aliases[p.name] = p.mode === 'client' ? './empty.js' : p.src
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return aliases
|
||||||
|
}
|
||||||
|
|
||||||
plugins() {
|
plugins() {
|
||||||
const plugins = super.plugins()
|
const plugins = super.plugins()
|
||||||
plugins.push(
|
plugins.push(
|
||||||
@ -81,7 +103,7 @@ export default class WebpackServerConfig extends WebpackBaseConfig {
|
|||||||
maxEntrypointSize: Infinity,
|
maxEntrypointSize: Infinity,
|
||||||
maxAssetSize: Infinity
|
maxAssetSize: Infinity
|
||||||
},
|
},
|
||||||
externals: []
|
externals: [].concat(config.externals || [])
|
||||||
})
|
})
|
||||||
|
|
||||||
// https://webpack.js.org/configuration/externals/#externals
|
// https://webpack.js.org/configuration/externals/#externals
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user