8

Slim 4 - Vue.js

 3 years ago
source link: https://odan.github.io/2020/07/21/slim4-vue.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Daniel’s Dev Blog

Daniel's Dev Blog

Developer, Trainer, Open Source Contributor

Blog About me Donate

Slim 4 - Vue.js

Daniel Opitz

Daniel Opitz

21 Jul 2020

Table of contents

Requirements

Introduction

Vue.js is an open-source JavaScript framework for building user interfaces and single-page applications. It was created by Evan You, and is maintained by him and the rest of the active core team members.

I assume that you have already installed and configures webpack for your project. If you want to read more about webpack, please read the Slim - Webpack article first.

Installation

To install Vue.js we need NPM and wepback.

Install Vue:

npm install vue

Install Vue loader:

npm install -D vue-loader vue-template-compiler

Add this webpack configuration to webpack.config.js:

// webpack.config.js
const VueLoaderPlugin = require('vue-loader/lib/plugin')

module.exports = {
  module: {
    rules: [
      // ... other rules
      {
        test: /\.vue$/,
        loader: 'vue-loader'
      }
    ]
  },
  plugins: [
    // make sure to include the plugin!
    new VueLoaderPlugin()
  ]
}

Read more: https://vue-loader.vuejs.org/guide/#manual-setup

Add this vue alias in webpack.config.js:

resolve: {
    alias: {
        vue: argv.mode === 'production' ? 'vue/dist/vue.min.js' : 'vue/dist/vue.js'
    }
},

Require vue in your global available JS file, eg. in layout/layout.js:

global.Vue = require('vue');

Usage

Create a new vue file, e.g. templates/home/home.vue

<script>
    const app = new Vue({
        el: '#app',
        data: {
            message: 'Hello Vue!'
        }
    });
</script>

Require the vue file in home.js

require('./home.vue');

Add some html to the template:

<div id="app">
    <h1>{{ message }}</h1>
</div>

Building

Add this scripts to your package.json file:

"scripts": {
    "build": "npx webpack --mode=production",
    "build:dev": "npx webpack --mode=development",
    "watch": "npx webpack --watch"
},

Run npm run build to compile the files for production or npm run build:dev for development.

To watch and compile all changes for development, run: npm run watch

Known issues

Vue with Twig

Vue and Twig use the same template syntax {{ }}. Twig will parse the templates before Vue can render it in the browser. To fix it you could change the Vue delimiters to [[ ]] with:

Vue.options.delimiters = ['[[', ']]'];

or you may drop Twig completely in favor of a native PHP template engine like Slim PHP-View or Plates.

© 2020 Daniel Opitz | Twitter


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK