vue现代化使用方法(一)

vue现代化使用方法(一)

目前前端开发已经非常类似GUI开发,前端人员需要了解大量业务逻辑,通过不同的页面交互行为给用户展示不同的界面或者引导用户进行不同的操作,这必然造成前端逻辑的繁重化,如何简单高效的维护开发代码是每个前端开发人员应该思考的问题。
内容整理中,会随时变更

安装

Vue引入到项目中,有两种方法:

  • 通过<script>标签引入
  • 通过npm方式引入

通过<script>标签引入

Vue当作普通脚本,通过外部js的方式引入到指定页面,这时Vue会被注册成为一个全局变量。
在这种方式中,可以把vue下载到本地,或者使用线上CDN。此外还要注意引入的Vue是开发版本,还是生产版本,两者区别在于生产版本下不会显示友好错误提示,测试环境下建议使用开发版本。

通过npm方式引入

通过npm install vue把vue引入到项目中,再结合webpack或者rollup使用。

通过标签方式引入vue的方法,只适合学习或者做demo用,实际项目中不建议那么做,建议通过npm方式引入vue。

构建一个hello world

本部分会结合webpack构建一个以vue组件为基础的初始项目。

结合webpack构建项目

webpack使用教程,参考webpack使用详解
node使用教程,参考node使用详解
babel使用教程,参考babel使用详解

  1. 安装node

  2. 在任意文件夹下创建如下结构的hello-world项目(包含src和dist两个文件夹)

    hello-world
        src
            containers
                hello-world
                    index.js
                    index.vue
            template
                base-vue.html
        dist
    
  3. 在hello-world目录下运行npm init -y,构建项目的package.json

  4. 安装vue,运行npm install vue --save(Vue是项目的运行时的依赖库,所以使用--save)

  5. 安装babel,运行npm install --save-dev babel-preset-latest(安装最新的转码规则),运行npm install --save-dev babel-preset-stage-2(安装处于草案的编码规则,处于草案阶段的编码规则基本可以使用,再有修改也只是进行增量更改),创建.babelrc文件,把新增的编码规范写入.babelrc文件中

    {
        "presets": ["es2015","stage-2"]
    }
    

安装babel-cli:npm install --save-dev babel-cli,让我们可以使用命令行代码的形式进行转码

  1. 安装webpack,运行npm install --save-dev webpack

  2. 安装html-webpack-plugin(支持通过模版生成html文件,简化html文件的创建),运行npm install --save-dev html-webpack-plugin

  3. 安装vue-loader(把.vue文件转成js文件),运行npm install --save-dev vue-loader,安装babel-loader,运行npm install --save-dev babel-loader

  4. 创建webpack.config.js,内容如下

    const path = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    
    module.exports = {
        entry: {
            app: './src/containers/hello-world/index.js'
        },
        output: {
            path: path.resolve(__dirname, 'dist'),
            filename: '[name].js'
        },
        module: {
            rules: [
                {test: /\.(js|jsx)$/, use: 'babel-loader'},
                {test: /\.vue/, use: 'vue-loader'}
            ]
        },
        plugins: [
            new HtmlWebpackPlugin({
                title: '这是一个新标题',
                filename: 'index.html',
                template: './src/template/base-vue.html'
            })
        ]
    };
    
  5. 在index.js,创建内容如下

    import Vue from 'vue';
    import app from './index.vue';
    
    new Vue({
        el: "#app",
        render: h => h(app)
    }); 
    
  6. 在index.vue,创建内容如下

    <template>
        <div class="wrap">
            <p>{{info}}</p>
        </div>
    </template>
    <script>
        export default {
            data () {
                return {
                    info: 'Hello world!'
                }
            }
        }
    </script>   
    
  7. 在package.json中script,添加一个build命令

    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "build": "./node_modules/.bin/webpack --config webpack.config.js"
    },
    
  8. 在项目所在目录的终端运行npm run build,这时终端一般会报如下错误

    Module build failed: Error: Cannot find module 'vue-template-compiler'
    

原因是我们通过npm install vue安装的版本是运行时版本,不包括编译部分,而我们在index.vue中又使用了template模板的形式,所以会报这个错误,解决办法就是安装这个依赖。运行npm install --save-dev vue-template-compiler,安装成功后,再次运行npm run build项目就可以运行通过,这时在dist目录下就会有两个构建的文件

```
dist
    app.js
    index.html
```

在浏览器运行dist下index.html,浏览器中就出现我们期望输出的Hello world!

到此,我们就创建了一个比较现代化的项目,里面包含了webpack,babel的一些基础使用,但功能上还差点,我们继续完善。

安装webpack-dev-server

运行npm install --save-dev webpack-dev-server
webpack-dev-server是配合webpack使用,提供实时重新加载的服务器,其内部使用webpack-dev-middleware。

webpack-dev-middleware提供了通过内存快速访问webpack资源的能力,同时有以下优点:
没有文件写入磁盘,在内存中处理文件;
如果在观察模式下更改了文件,页面会停止请求,直到编译完成;
支持热模块重载(HMR);

package.json中scripts添加webpack-dev-server启动操作

"scripts": {
    ...
    "open": "webpack-dev-server --open"
  },

在webpack.config.js添加webpack-dev-server运行参数

module.exports = {
    ...
    devServer: {
        contentBase: './dist', // webpack-dev-server服务器启动后的目录
        hot: true // 开启热替换
    },
    ...
    plugins: [
        ...
        new webpack.HotModuleReplacementPlugin({}) // 启用热更新
    ]
    ...
};

在这里,我们使用的是inline模式来自动刷新页面,并通过Nodejs API方式运行inline模式,具备可以参考webpack使用部分介绍

安装npm-run-all

到此我们会发现,我们的项目需要通过两次命令行操作才能正常运行起来:

npm run build
npm run open

使用起来会有些烦琐,这里可以使用npm-run-all把多个npm scripts命令串起来(也可以在npm scripts中通过&符把多个脚本串起来,不过这个看起来不方便)

运行npm install --save-dev npm-run-all

在package.json中的scripts下添加命令

"scripts": {
    ...
    "start": "npm-run-all --parallel build open"
 }

在项目目录下,运行npm start,现在我们构建了一个具备热更新和自动重新加载的项目,一切看起来很酷,不过还有一个问题需要解决,我们发现每一次页面文件的改动都会在dist文件下生成相关热更新的文件,大概文件名如:

...hot-update...

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容