# 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
- # webpack+vue+vueRouter 模块化构建完整项目实例
- webpack+vue+vueRouter模块化构建完整项目实例超详细步骤(代码、入门篇)
- webpack+vue+vueRouter模块化构建完整项目实例详细步骤-入门篇
- webpack+vue+vueRouter模块化构建完整项目实例超详细步骤(附截图、代码、入门篇)
- webpack+vue+vueRouter+es6 构建的简单实例项目
- vue+vueRouter+webpack的简单实例
- vue+vueRouter 实例demo
- webpack 构建Vue项目
- vue + webpack 构建项目
- vue + webpack 构建项目
- vue+webpack构建项目过程
- vue+webpack构建项目过程
- vue配置 webpack构建vue项目
- webpack+vue构建前端框架简单实例
- 构建基于webpack的vue.js项目
- webpack构建vue项目(配置篇)
- webpack构建vue项目(配置篇)
- 提高 webpack 构建 Vue 项目的速度
- java基础入门补充(002) Cloneable接口 深复制与浅复制
- 分页查询 原理以及网页实现固定页码数 搜索的实现
- Bluetooth MESH探究 --- (8) 怎么实现MESH网络?
- 【剑指offer】面试题64:求1+2+......+n
- fetch 基本Api
- # webpack+vue+vueRouter 模块化构建完整项目实例
- FTPrep, 20 Valid Parentheses
- 《零基础入门学习Python》学习过程笔记【42魔法方法:算数运算】没看
- spring Boot启动器功能详解
- [PAT乙级]1025. 反转链表 (25)
- Android开发--自定义动态导航栏的实现(很简单)
- samba服务器的搭建与配置
- 几种压缩算法原理介绍
- javaWeb三大器之过滤器:Filter