赞
踩
./day05_webpack使用和配置/01-webpack的使用
目录下这里是使用上一个博客的案例,继续整合vue。慢慢搭建一个正常开发的框架。
从main1.js
着步演练到 main2.js
,再到 main3.js
,再到 main4.js
,最后是完美版的 main.js
。
现在,我们希望在项目中使用Vuejs,那么必然需要对其有依赖,所以需要先进行安装
注:因为我们后续是在实际项目中也会使用vue的,所以并不是开发时依赖
安装命令
npm install vue --save
那么,接下来就可以按照我们之前学习的方式来使用Vue了
在入口文件main1.js
中引入,打包时,还是使用main.js
打包
修改完成后,重新打包,运行程序:
runtime-only版本的Vue
,什么意思呢?vue有两个模式先:runtime-only和runtime-compiler
先了解这两个模式:
runtime-only -> 代码中,不可以有任何的template,
runtime-compiler -> 代码中,可以有template ,因为游compiler 可以用于编译 template
resolve: {
// import 文件时,可以不写后缀,在这里配置,但是我这里不写配置不写后缀也可以成功。
extensions: ['.js', '.css', '.vue'],
// alias: 别名, $:以vue为结尾的
alias: {
'vue$': 'vue/dist/vue.esm.js'
}
}
resolve 与 entry、output、module 同级
然后打包npm run build
,显示成功。打开浏览器显示成功。
el属性
,用于和index.html中的#app进行绑定,让Vue实例之后可以管理它其中的内容{{message}}
内容删掉,只保留一个基本的id为div的元素const app = new Vue({
el: '#app',
// 这里 替换了 index.html 中的 div
template: `
<div>
<span>{{message}}</span>
<button>按钮</button>
<span>{{name}}</span>
</div>
`,
data: {
message: '冯凡利 i love you',
name: '冯安晨'
}
})
稍后
我们会将template模板中的内容进行抽离。template、script、style
,结构变得非常清晰。// 1.使用commonjs的模块化规范 const {add, mul} = require('./js/mathUtils.js') console.log(add(20, 30)); console.log(mul(20, 30)); // 2.使用ES6的模块化的规范 import {name, age, height} from "./js/info"; console.log(name); console.log(age); console.log(height); // 3. 引入静态资源 css 文件 require('./css/normal.css') // 4. 引入静态资源 less 文件 require('./css/special.less') document.writeln('<h2>你好啊 冯凡利</h2>') // 5. 引入vue进行开发 import Vue from 'vue' // 相比于 main2.js ,这里把 内容放到了 template 中 const app = new Vue({ el: '#app', // 这里 替换了 index.html 中的 div template: ` <div> <span>{{message}}</span> <button>按钮</button> <span>{{name}}</span> </div> `, data: { message: '冯凡利 i love you', name: '冯安晨' } })
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>04-webpack配置vue</title>
</head>
<body>
<div id="app">
<!-- <h2>{{message}}</h2>-->
</div>
<script src="./dist/bundle.js"></script>
</body>
</html>
然后打包npm run build
,显示成功。打开浏览器显示成功。
通过模板的语法,可以将template模板提取出来,为一个对象。如下所示:
main3.js
// 1.使用commonjs的模块化规范 const {add, mul} = require('./js/mathUtils.js') console.log(add(20, 30)); console.log(mul(20, 30)); // 2.使用ES6的模块化的规范 import {name, age, height} from "./js/info"; console.log(name); console.log(age); console.log(height); // 3. 引入静态资源 css 文件 require('./css/normal.css') // 4. 引入静态资源 less 文件 require('./css/special.less') document.writeln('<h2>你好啊 冯凡利</h2>') // 5. 引入vue进行开发 import Vue from 'vue' const App = { template: ` <div> <span>{{message}}</span> <button @click="btnClick">按钮</button> <span>{{name}}</span> </div> `, data(){ return { message: '冯凡利 i love you', name: '冯安晨' } }, methods: { btnClick(){ console.log('btnClick') } } } // 相比于 main2.js ,这里把 模板给抽出来 做了子组件 const app = new Vue({ el: '#app', template: `<App/>`, components: { App } })
index.html 不变,
然后打包npm run build
,显示成功。打开浏览器显示成功。
app.js
文件中,目录如下:app.js
内容如下:
export default { template: ` <div> <span>{{message}}</span> <button @click="btnClick">按钮</button> <span>{{name}}</span> </div> `, data(){ return { message: '冯凡利 i love you', name: '冯安晨' } }, methods: { btnClick(){ console.log('btnClick') } } }
main4.js主要内容修改如下:
// 5. 引入vue进行开发
import Vue from 'vue'
import App from './js/app'
/*
* 相比较于 main3.js ,这里把 模板子组件 提出来单放在了一个 vue/app.js 文件中。
* */
const app = new Vue({
el: '#app',
template: `<App/>`,
components: {
App
}
})
index.html 不变,
然后打包npm run build
,显示成功。打开浏览器显示成功。
vue-loader
和vue-template-compiler
。npm install vue-loader@13.0.0 vue-template-compiler@2.6.12 --save-dev
webpack.config.js
的配置文件,(rules中添加一个对象如下): {
test: /\.vue$/,
use: ['vue-loader']
}
编写vue/app.vue 文件,内容如下:
<template> <div> <span>{{message}}</span> <button @click="btnClick">按钮</button> <span>{{name}}</span> <br/> <Cpn/> </div> </template> <script> import Cpn from './Cpn'; export default { name: "App", components: { Cpn: Cpn }, data() { return { message: '冯凡利 i love you', name: '冯安晨' } }, methods: { btnClick() { console.log('btnClick') } } } </script> <style scoped> </style>
再编写里面的一个子组件cpn.vue,内容如下
<template> <div> <h2>我是Cpn子组件的标题</h2> <span>{{name}}</span> </div> </template> <script> export default { name: "Cpn", data() { return { name: '我是cpn子组件的内容' } } } </script> <style scoped> </style>
main.js如下(主要部分)
// 5. 引入vue进行开发 import Vue from 'vue' // import App from './js/app' import App from './vue/App' /* * 这里多了一个 .vue 文件,所以要加一个 loader。 * */ /* * 相比较于 main4.js , * 这里把 提出来的组件 vue/app.js ,进行了模板 与 js 分离, * 写了一个新的文件 vue/App.vue,把模板组件给提出来了。 * */ const app = new Vue({ el: '#app', template: `<App/>`, components: { App } })
index.html 不变,
然后打包npm run build
,显示成功。打开浏览器显示成功。
npm install vue-loader@13.0.0 vue-template-compiler@2.5.21 --save-dev
报错
ERROR in ./src/vue/App.vue
Module build failed: Error:
Vue packages version mismatch:
- vue@2.6.12
- vue-template-compiler@2.5.21
This may cause things to work incorrectly. Make sure to use the same version for both.
If you are using vue-loader@>=10.0, simply update vue-template-compiler.
If you are using vue-loader@<10.0 or vueify, re-installing vue-loader/vueify should bump vue-template-compiler to the latest.
版本问题
vue 的版本 2.6.12
这里的vue-template-compiler 版本为 2.5.21
这两个应该一致才可以,所以将 vue-template-compiler 版本改为 2.6.12 ,与 vue 的版本保持一致 ,即可。
最终的 命令为
npm install vue-loader@13.0.0 vue-template-compiler@2.6.12 --save-dev
到此结束,webpack搭建vue的小框架开发,一步一步安装webpack的loader,一步一步的提取js代码到提取出vue文件。就到此结束啦
正常的开发中是不会这样一步步来的,而是有vue-cli脚手架来完成的。再使用脚手架之前,还得学习一下webpack的plugin,来简化开发。继续看下一个博客。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。