一、案例环境前置准备:

创建一个空目录用于案例演示

mkdir vue-sample

初始化案例和安装webpack

cd vue-sample
npm install webpack@3.6.0 --save-dev

安装Vue

npm install vue --save

保留之前的webpack.config.js

const path = require('path'); /* 这里依赖一个path,这个path来自于npm的包中的一个模块,必须要有path包才能用 */
/* 所以需要装包 npm init */ module.exports = {
entry : './src/main.js', /* 打包的程序入口 */
output : { /* 打包输出的文件,出口路径 分为路径和文件名 */
// path : './dist', /* 路径可以动态获取 */
path : path.resolve(__dirname, 'dist'),
/* __dirname是一个全局变量 值是当前webpackconfig.js文件所在的绝对路径, cans参数二就是我们自定义的目录名称 */
filename : 'bundle.js', /* bundle 意思打包 就是打包好的JS文件 */
}, }

和package.json的打包脚本

"build": "webpack"

还是一样的目录结构

二、引用Vue

在Main.js中导入Vue:

import Vue from 'vue';  /* 模块化使用需要导入 */

const app = new Vue({
el : '#v',
data : {
message : 'Hello Module Vue!!!'
},
});

index.html编写:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <div id="v">
<p>{{message}}</p>
</div> <script type="text/javascript" src="./dist/bundle.js"></script>
</body>
</html>

虽然打包成功,但是并没有看到页面出现效果

浏览器控制台发生Vue的警告:

bundle.js:925 [Vue warn]: You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build.

(found in <Root>)

是因为runtime-only 与runtime-compiler的区别?

解决方法是在webpack.config.js配置中设置这个别名解析:

    resolve : {
alias : {
'vue$' : 'vue/dist/vue.esm.js'
}
}

解析正常:

三、Template & El 属性

补充概念:SPWA概念【Simple Page Web Application】

正常的开发不会在页面编写任何代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <div id="v">
<p>{{message}}</p> <!-- 这里不会编写任何东西 -->
</div>
<script type="text/javascript" src="./dist/bundle.js"></script>
</body>
</html>

编写的方式变更为这样【main.js】:

import Vue from 'vue';  /* 模块化使用需要导入 */

const app = new Vue({
el : '#v',
template : `
<p>{{message}}</p>
`,
data : {
message : 'Hello Module Vue!!!'
},
});

template的模板将会把绑定的内容直接替换覆盖掉

四、Component演变渐进

上述的template定义方式只能插入一些简单的内容

如果模板的结构庞大复杂,则需要专门定义声明

main.js的改变:

import Vue from 'vue';  /* 模块化使用需要导入 */

/* 1、移交到这个组件对象中声明管理 */
const App = {
template : `
<p>{{message}}</p>
`,
data () {
return {
message : 'Hello Module Vue!!!'
}
},
} new Vue({ /* const app 常量赋值可以不写 */
el : '#v',
components : {
App /* 2、 以组件的方式注册 */
},
template : '<App/>', /* 3、 以模板的方式把组件渲染 */ // template : `
// <p>{{message}}</p>
// `,
// data : {
// message : 'Hello Module Vue!!!'
// },
});

也就是说组件对象它也是一个JS对象

那么组件不久可以移交到JS文件中吗

我们直接创建一个JS文件【app.js】:

export default {
template : `
<p>{{message}}</p>
`,
data () {
return {
message : 'Hello Module Vue!!!'
}
},
}

在Main中引入:

import Vue from 'vue';  /* 模块化使用需要导入 */
import App from './js/app';
/* 1、移交到这个组件对象中声明管理 */
// const App = {
// template : `
// <p>{{message}}</p>
// `,
// data () {
// return {
// message : 'Hello Module Vue!!!'
// }
// },
// } new Vue({ /* const app 常量赋值可以不写 */
el : '#v',
components : {
App /* 2、 以组件的方式注册 */
},
template : '<App/>', /* 3、 以模板的方式把组件渲染 */ // template : `
// <p>{{message}}</p>
// `,
// data : {
// message : 'Hello Module Vue!!!'
// },
});

我们对APP组件的修改只需要在app.js文件中就行了

但是目前的问题是模板的HTML代码还没有和JS代码进行分离

所以Vue创建了一个新的文件【组件文件】XXX.vue

<template>

</template>

<script>
export default {
name: "app"
}
</script> <style scoped> </style>

template就表示我们的模板

script表示编写的JS代码

而style专门处理样式编写

五、Loader支持

.vue文件并不能被识别解析,所以需要对应的提供一套Loader帮助webpack

npm install vue-loader@13.0.0 vue-template-compiler --save-dev

然后配置:

const path = require('path'); /* 这里依赖一个path,这个path来自于npm的包中的一个模块,必须要有path包才能用 */
/* 所以需要装包 npm init */
module.exports = {
entry : './src/main.js', /* 打包的程序入口 */
output : { /* 打包输出的文件,出口路径 分为路径和文件名 */
// path : './dist', /* 路径可以动态获取 */
path : path.resolve(__dirname, 'dist'),
/* __dirname是一个全局变量 值是当前webpackconfig.js文件所在的绝对路径, cans参数二就是我们自定义的目录名称 */
filename : 'bundle.js', /* bundle 意思打包 就是打包好的JS文件 */
},
module: {
rules: [
{
test: /\.css$/,
use: [ 'style-loader','css-loader' ] /*'style-loader',*/
},
{
test:
/\.vue$/,
use: [ 'vue-loader'
]
},
]
},
resolve : {
alias : {
'vue$' : 'vue/dist/vue.esm.js'
}
}
}

注意main.js的导入

import Vue from 'vue';  /* 模块化使用需要导入 */
import App from './component/app.vue';
/* 1、移交到这个组件对象中声明管理 */
// const App = {
// template : `
// <p>{{message}}</p>
// `,
// data () {
// return {
// message : 'Hello Module Vue!!!'
// }
// },
// } new Vue({ /* const app 常量赋值可以不写 */
el : '#v',
components : {
App /* 2、 以组件的方式注册 */
},
template : '<App/>', /* 3、 以模板的方式把组件渲染 */ // template : `
// <p>{{message}}</p>
// `,
// data : {
// message : 'Hello Module Vue!!!'
// },
});

【Vue】Re11 Vue 与 Webpack的更多相关文章

  1. Vue.js——60分钟webpack项目模板快速入门

    概述 browserify是一个 CommonJS风格的模块管理和打包工具,上一篇我们简单地介绍了Vue.js官方基于browserify构筑的一套开发模板.webpack提供了和browserify ...

  2. Vue ES6 Jade Scss Webpack Gulp

    一直以来非常庆幸曾经有翻过<代码大全2>:这使我崎岖编程之路少了很多不必要的坎坷.它在软件工艺的话题中有写到一篇:"首先是为人写程序,其次才是机器(Write Programs ...

  3. vue学习:vue+webpack的快速使用指南(新手向)

    一.vue有两种使用方式: 1.下载vue.js <script src="vue.js"></script> 2.使用npm npm install vu ...

  4. Vue(SPA) WebPack模块化打包、SEO优化(Vue SSR服务端同构直出)、全浏览器兼容完整解决方案

    白驹过隙,时光荏苒 大概去年这个时候写了angular 结合webpack的一套前端方案,今年此时祭出vue2结合webpack的一套前端方案. 明年的这个时候我又是在做什么... 读在最前面: 1. ...

  5. Vue.js——60分钟webpack项目模板快速入门

    概述 browserify是一个 CommonJS风格的模块管理和打包工具,上一篇我们简单地介绍了Vue.js官方基于browserify构筑的一套开发模板.webpack提供了和browserify ...

  6. vue 项目中 自定义 webpack 的 配置文件(webpack.config.babel.js)

    webpack.config.babel.js,这样命名是想让webpack在编译的时候自动识别es6的语法,现在貌似不需要这样命名了,之前用webpack1.x的时候貌似是需要的 let path ...

  7. vue cli 3 & webpack-merge & webpack 3 & bug

    vue cli 3 & webpack-merge & webpack & bug bug webpack-merge & bug webpack-merge ??? ...

  8. (转)webpack从零开始第6课:在Vue开发中使用webpack

    vue官方已经写好一个vue-webpack模板vue_cli,原本自己写一个,发现官方写得已经够好了,自己写显得有点多余,但为了让大家熟悉webpack,决定还是一步一步从0开始写,但源文件就直接拷 ...

  9. vue --- 解读vue的中webpack.base.config.js

    const path = require('path') const utils = require('./utils')// 引入utils工具模块,具体查看我的博客关于utils的解释,utils ...

  10. Vue+ElementUI项目使用webpack输出MPA

    目录 Vue+ElementUI项目使用webpack输出MPA 一. 需求分析 二. 原方案分析 三. 多页面改造3步走 四. 小结 Vue+ElementUI项目使用webpack输出MPA 示例 ...

随机推荐

  1. REACT 前端界面提交

    在react项目中安装代理中间件 setupProxy.js文件 const { createProxyMiddleware: proxy } = require('http-proxy-middle ...

  2. 浏览器的同源策略 jsonp方法解决跨域

    // 浏览器的同源性         // 在 浏览器 处理请求时 默认执行的是 同源策略         // 也就是 浏览器 只 允许 同源的项目/请求 之间 获取响应体内容         // ...

  3. runliuv MSDN I TELL YOU

    runliuv MSDN I TELL YOU 老站点:WIN SEVER ,VISUAL STUDIO 早期版本 老站点:https://msdn.itellyou.cn/ 新站点:最近的WIN10 ...

  4. vue安装及升级

    先装好note.js 安装过程很简单,一直点下一步就ok了.1.1我们通过打开命令行工具(win+R),输入node -v查看node的版本,若出现相应的版本号说明你安装成功了 1.2.npm包管理器 ...

  5. __proto__和[[Prototype]]的区别

    __proto__和[[Prototype]]的区别 先看下面这一段代码: const obj1 = Object.create(null); // very plain object obj1.__ ...

  6. 抖音验证签名和接口含中文签名,需要在发送端加上utf8编码

    抖音验证签名和接口含中文签名,需要在发送端加上utf8编码 抖音验签和抖音异步通知回调验签解决:是对整个接收的字符串做验签,而不是部分数据做验签解决中文参数问题,否则中文乱码报验签错误 签名算法htt ...

  7. elasticSearch RangeQuery范围查询from to的理解

    elasticSearch RangeQuery范围查询from to的理解 Elasticsearch Guide 选择版本号来查询对应的文档内容:https://www.elastic.co/gu ...

  8. 洛谷 P1216 数字三角形

    题目链接:数字三角形 思路 dp:金字塔顶的元素为起点,金字塔每行的最左侧数字只能从上一层的最左侧数字到达,如7 -> 3 -> 8 -> 2 -> 4,这些数字中的每一个(除 ...

  9. Centos编译加载toa模块

    什么是toa模块 toa模块是为了让后端的realserver能够看到真实的clientip而不是lvs的dip 安装步骤 安装依赖包 yum -y install kernel-devel gcc ...

  10. TCP,UDP,IP,数据链路层头部详解

    UDP头部 可以看到UDP头部由(源端口).(目的端口).(长度)跟(校验和)组成,总共8字节. 源端口:发送方的端口号,16位,即2字节. 目的端口:接收方的端口号,16位,即2字节. 长度:头部+ ...