VueJs

Memo

Propriétés

Validation

validator: (value: [boolean, object]) => value instanceof Vue || typeof value === 'object'

vue-cli

Configuration

La configuration de vue-cli se fait dans le fichier vue.config.js à la racine du projet.

Spécifier la destination des builds

const path = require("path");

module.exports = {
  outputDir: path.resolve(__dirname, "../web/XXX"),
  assetsDir: "../web/assets"
}

Eviter l'erreur "Invalid host header"

module.exports = {
  devServer: {
	  disableHostCheck: true
  }
}

Webpack - Corriger le problème de connexion WS lors de l'utilisation d'un container

docker-compose.yml

environment:
      - CODESANDBOX_SSE=true

Vite - Configurer le port WS du client

vite.config.js

import { defineConfig } from 'vite'

export default defineConfig({
  server: {
    hmr: {
      clientPort: 40000
    }
  }
}

Vite - Permettre les imports de modules

vite.config.js

import { defineConfig } from 'vite'
import tsconfigPaths from 'vite-tsconfig-paths'

export default defineConfig({
  plugins: [tsconfigPaths()]
}

Correction de bugs

vue-cli Super expression must either be null or a function

Lors de l'initialisation d'un nouveau projet avec vue-cli, l'exécution des tests “unit” peut échouer avec le message d'erreur suivant :

vue-cli Super expression must either be null or a function

Voici la solution pour contourner le problème en attendant un correctif :

Fichier package.json :

"scripts": {
  "test": "vue-cli-service test:unit --require tests/unit/setup.js"
}

Fichier tests/unit/setup.js :

require('jsdom-global')();

window.Date = Date;

Structure de base

<!DOCTYPE html>
<html>
<head>
    <title>Title</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width">
    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
    <link rel="stylesheet" href="assets/style.css"/>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.9/semantic.min.css"/>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.9/semantic.min.js"></script>
</head>
<body>
    <div id="app">
        <h1 class="app-header ui header">
            Title <span class="right">¯\_(ツ)_/¯</span>
        </h1>
        <div class="app-body">
            {{ message }}
        </div>
        <div class="app-footer">
            <div class="content">¯\_(ツ)_/¯</div>
        </div>
    </div>
    <script>
    new Vue({
        el: '#app',
        data: {
            message: Hello world,
            data: {}
        },
        created () {
            that = this;
            fetch('/data.json', {
                credentials: 'include'
            })
                .then(function(response) {
                    response.json().then(function(result) {
                        that.data = result.data;
                    });
                })
        }
    });
    </script>
</body>
</html>

A CLASSER

const path = require("path");

module.exports = {
  devServer: {
	  disableHostCheck: true
  },
  outputDir: path.resolve(__dirname, "../web"),
  publicPath: '/simulation/gcid/',
  chainWebpack: config => {
    config
      .plugin('html')
      .tap(args => {
	args[0].minify = {}
        return args
      })
  }
}
props: {
  active: [Boolean, false, 'sync'],
  clickAway: [Boolean, true],
  escEscape: [Boolean, true],
  leaveDealy: [Number, 300],
  modalClass: [Object, ''],
  transition: [Boolean, true]
}