Search code examples
vue.jsvuejs2vue-componentvue-router

Can we make vue.js application without .vue extension component and webpack?


Note: Can we write vue.js large application without using any compiler for code like currently i see all example use webpack now to make vue.js code compatible for browser .

I want make vue.js application without webpack and without using .vue extension. Is it possible? if it is possible, can you provide a link or give sample how to use routing in that case.

As we make component in .vue extension can be make component in .js extension and use application as we do in angular 1 where we can make whole app without any trans-compiler to convert the code.

Can be done that in html , css , js file only and no webpack sort of thing.

What i have done . index.js

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>vueapp01</title>
  </head>
  <body>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

main.js this file added in webpack load time

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

App.vue

<template>
  <div id="app">
    <img src="./assets/logo.png">
    <a href="#/hello">Hello route</a>
    <a href="#/">Helloworld route</a>
    {{route}}
    <router-view/>
     <!-- <hello></hello> -->
  </div>
</template>

<script>

export default {
  name: 'App',
  data () {
    return {
      route : "This is main page"
    }
  }

}
</script>

router

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import Hello from '../components/Hello'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    },
    {
      path: '/hello',
      name: 'Hello',
      component: Hello
    }
  ]
})

I have done something like this . Can we do this by just html , css , js file only with not webpack to compile code . Like we do in angular 1 .

Thanks


Solution

  • As stated in this jsFiddle: http://jsfiddle.net/posva/wtpuevc6/ , you have no obligation to use webpack or .vue files.

    The code below is not from me and all credit goes to this jsFiddle creator:

    Create an index.html file:

    <script src="https://npmcdn.com/vue/dist/vue.js"></script>
    <script src="https://npmcdn.com/vue-router/dist/vue-router.js"></script>
    <script src="/js/Home.js"></script>
    <script src="/js/Foo.js"></script>
    <script src="/js/router.js"></script>
    <script src="/js/index.js"></script>
    
    <div id="app">
      <router-link to="/">/home</router-link>
      <router-link to="/foo">/foo</router-link>
      <router-view></router-view>
    </div>
    

    Home.js

    const Home = { template: '<div>Home</div>' }
    

    Foo.js

    const Foo = { template: '<div>Foo</div>' }
    

    router.js

    const router = new VueRouter({
      mode: 'history',
      routes: [
        { path: '/', component: Home },
        { path: '/foo', component: Foo }
      ]
    })
    

    index.js

    new Vue({
        router,
      el: '#app',
      data: {
        msg: 'Hello World'
      }
    })
    

    Appreciate the framework...

    Just a sidenote: .vue files are really awesome, you should definitely try them if not using them is not a requirement