vue-loader的简单例子
一.模块加载器
1.broserify 模块加载器, 只能加载js 2.webpack 模块加载器, 一切东西都是模块, 最后打包到一块
.vue文件 ==> 需要用webpack编译成浏览器可读文件
vue组件代码, 三块代码
1. <template></template> ==> 放html 2. <style></style> ==> 放css 3. <script></script> ==> js代码
二.不使用vue-cli来创建, 手动创建
1..初如化package.json
& npm init --yes // 默认
生成vue-loader-demo目录
F:\learning\znsvue>md vue-loader-demo
删除目录
F:\learning\znsvue> del vue-loader-demo3
2.vue-loader-demo创建以下文件
|-index.html 首页 |-main.js 入口js文件 |-App.vue vue文件(第一个字母大写, 官方推荐命名法) |-package.json 工程文件(项目依赖, 名称, 配置) |-webpack.config.js webpack配置文件 |-components/Menu.vue 公用html
3.webpack准备工作
App.vue ==> 用vue-loader来编译
& npm install vue --save & npm install vue-loader --save & npm install webpack --save-dev & npm install webpack-dev-server --save-dev & npm install vue-loader --save-dev & npm install vue-html-loader --save-dev & npm install css-loader --save-dev & npm install vue-style-loader --save-dev & npm install vue-hot-reload-api --save-dev & npm install vue-loader vue-html-loader css-loader vue-style-loader vue-hot-reload-api --save-dev
ES转换, babel编译
& npm install babel-loader --save-dev & npm install babel-core --save-dev & npm install babel-plugin-transform-runtime --save-dev & npm install babel-preset-es2015 --save-dev & npm install babel-runtime --save-dev & npm install babel-loader babel-core babel-plugin-transform-runtime babel-preset-es2015 babel-runtime --save-dev
4.在webpack.config.js配置好
module.exports = { entry: "./main.js", // 入口js文件 output: { path: __dirname, filename: "build.js" // 输出js文件 }, module: { loaders: [ { test: /\.vue$/, loader: 'vue-loader' }, { test: /\.js$/, loader: 'babel-loader', query:{ presets: 'es2015' }, exclude: /node_modules/ } ] }, resolve: { alias: { 'vue$': 'vue/dist/vue.common.js' } } }
5.在package.json配置webpack打包
"scripts": { "dev": "webpack-dev-server --inline --hot" },
6.index.html里引入output的build.js
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <div id="box"> <Hello></Hello> </div> <script src="build.js"></script> </body> </html>
运行命令打包
$ npm run dev
命令行运行webpack命令,
如果发现页面有报错: [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.
运行时构建不包含模板编译器,因此不支持 template 选项,只能用 render 选项,但即使使用运行时构建,在单文件组件中也依然可以写模板,因为单文件组件的模板会在构建时预编译为 render 函数。
上面一段是官方api中的解释。就是说,如果我们想使用template,在webpack.config.js添加以下以行
resolve: { alias: { 'vue$': 'vue/dist/vue.common.js' } }
7.在main.js里导入vue文件
import Vue from 'vue'; import Hello from "./App.vue"; new Vue({ el: "#box", template: '<Hello/>', components: { Hello } })
8.主要App.vue文件中
<template> <div class="huangtao"> <div @click="change()">{{msg}}</div> <my-menu></my-menu> </div> </template> <script> import Menu from "./components/Menu.vue"; export default { data () { return { msg: '这是App.vue内容' } }, methods: { change(){ this.msg = "new Hello World!" } }, components: { "my-menu" : Menu } } </script> <style> html { background: green; color: #fff; font-size: 20px; } </style>
9.components/Menu.vue文件中
<template> <ul> <li @click="change()">{{msg}}</li> </ul> </template> <script> export default { data () { return { msg: '这是引入Menu.vue内容' } }, methods: { change(){ this.msg = "new Hello World!" } } } </script>