# webpack+vue+vueRouter 模块化构建完整项目实例

来源:互联网 发布:软件测试性能测试 编辑:程序博客网 时间:2024/06/15 13:16

开始

  • 新建项目vuedemo, cd vuedemo
  • cnpm init -y 初始化项目(生成package.json)
  • cnpm install –save vue ,安装项目依赖, 默认安装最新版vue,(生产node_modules)
  • cnpm install –save-dev webpack webpack-dev-server 安装webpack,webpack-dev-server(是一个小型的Node.js Express服务器),说明:–save-dev 是你开发时候依赖的东西,–save 是你发布之后还依赖的东西
  • cnpm install –save-dev babel-core babel-loader babel-preset-es2015 安装babel,babel的作用是将es6的语法编译成浏览器认识的语法es5
  • cnpm install –save-dev vue-loader vue-template-compiler 用来解析vue的组件,.vue后缀的文件
  • cnpm install –save-dev css-loader style-loader 用来解析css
  • cnpm install –save-dev url-loader file-loader 用于打包文件和图片
  • cnpm install –save-dev sass-loader node-sass 用于编译sass
  • cnpm install –save-dev vue-router 安装路由

  • 文件目录结构如下:

    这里写图片描述

  • 说明:

    1、 dist文件是后面执行webpack指令生产的,不用管;

    2、webpack.config.js 配置文件,本身也是一个标准的Commonjs规范的模块;

    3、routes.js文件放路由配置文件;

    4、index.html首页入口文件

    5、App.vue是项目入口文件。

    6、main.js这是项目的核心文件。全局的配置都在这个文件里面配置。

    7、commponents目录里面放了公共组件header文件。

    8、views文件放详情页面;

代码

  • webpack.config.js
    test:一个匹配loaders所处理的文件的拓展名的正则表达式(必须)
    loader:loader的名称(必须)
    include/exclude:手动添加必须处理的文件(文件夹)或屏蔽不需要处理的文件(文件夹)(可选);*
var path = require('path')var webpack = require('webpack')module.exports = {    entry: './src/main.js',//值可以是字符串、数组或对象    output: {        path: path.resolve(__dirname, './dist'),//Webpack结果存储        publicPath: '/dist/',        filename: 'build.js'    },    module: {        rules: [            {                test: /\.vue$/,                loader: 'vue-loader',                options: {                    loaders: {                    }                    // other vue-loader options go here                }            },            {                test: /\.js$/,                loader: 'babel-loader',                exclude: /node_modules/            },            {                test: /\.(png|jpg|gif|svg)$/,                loader: 'file-loader',                options: {                    name: '[name].[ext]?[hash]'                }            }            //自己加的            ,            {                test: /\.css$/,                loader: "style-loader!css-loader"            }            ,            {                test: /\.scss$/,                loader: "style-loader!css-loader!sass-loader!"            }        ]    },    resolve: {        alias: {            'vue$': 'vue/dist/vue.esm.js'        }    },    devServer: {//webpack-dev-server配置        historyApiFallback: true,//不跳转        noInfo: true,        inline: true//实时刷新    },    performance: {        hints: false    },    devtool: '#eval-source-map'}if (process.env.NODE_ENV === 'production') {    module.exports.devtool = '#source-map'    // http://vue-loader.vuejs.org/en/workflow/production.html    module.exports.plugins = (module.exports.plugins || []).concat([        new webpack.DefinePlugin({            'process.env': {                NODE_ENV: '"production"'            }        }),        new webpack.optimize.UglifyJsPlugin({            sourceMap: true,            compress: {                warnings: false            }        }),        new webpack.LoaderOptionsPlugin({            minimize: true        })    ])}
  • routes.js
// 引用模板import Vue from 'vue';import Router from 'vue-router';import indexPage from './components/header.vue'import homePage from './views/home.vue'import aboutPage from './views/about.vue'Vue.use(Router)export default new Router({    routes:[        {            path:'/',            component:homePage        },        {            path:'/about',            component:aboutPage        }    ]})
  • index.html
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body><div id="appIndex"></div><script src="./dist/build.js"></script></body></html>
  • App.vue
<!--App.vue是项目入口文件。--><template>    <div id="app">        <header-tab></header-tab>        <h2>{{msg}}</h2>        <div class="nav-box">            <p class="nav-list">                <router-link class="nav-item" to="/">首页</router-link>                <router-link class="nav-item" to="/about">关于</router-link>            </p>        </div>        <div>            <router-view></router-view>        </div>    </div></template><script>    import HeaderTab from './components/header.vue';    export default {        name: 'app',        data () {            return {                msg: 'Welcome to Your Vue.js App'            }        },        components:{            HeaderTab        }    }</script>
  • main.js
//main.js这是项目的核心文件。全局的配置都在这个文件里面配置import Vue from 'vue'import App from './App.vue'import router from './routes.js'import './assets/styles/base.css'//import './assets/sass/reset.sass'//报错暂时不用sassVue.config.debug = true;//开启错误提示new Vue({        router,        el: '#appIndex',        render: h => h(App)})
  • commponents
    1、header.vue
<template>    <div>        <h1>共同header</h1>        <img src="../assets/imgs/logo.png">    </div></template>
  • views文件放详情页面;
    1、 about.vue
<template>    <div>about</div></template>

2、home.vue

//index.vue<template>    <div>        <ol>            <li v-for="todo in todos">                {{ todo.text }}            </li>        </ol>        <button @click="eClick()">事件</button>    </div></template><script>    export default {        name: 'indexP',        data () {            return {                todos: [                    { text: 'Learn JavaScript' },                    { text: 'Learn Vue' },                    { text: 'Build something awesome' }                ]            }        },        methods:{            eClick(){                console.log(9999);            }        }    }</script>
  • base.css
h1{    color: #999;}

运行

  • 项目run, 执行指令 webpack
  • webpack-dev-server
    运行结果如下
    这里写图片描述
阅读全文
0 0
原创粉丝点击