Vuejs - 工欲善其事必先利其器
既然是实战,怎离不开项目开发的环境呢?先给大家推荐下我的个人开发环境:
硬件设备:Mac OSX
编译器:Visual Studio Code
命令行工具:iTerm2
调试工具:Chrome Dev tool + vue-devtools
版本管理:Git
具体工具的操作界面和如何使用,这里就不展示了。随便用搜索引擎搜索,就是相关介绍。大家可以根据个人喜好,来选择适合你的开发环境。
模块化开发
前面的文章中使用 Vue,都是直接引入源码方式来使用,但是实际开发中项目一般很复杂,并且会涉及到很多页面模板,不可能所有的功能我们都写在同一个js文件,然后在通过 script 标签引入,这样项目大了会越来越不易维护,所以项目需要模块化开发。
关于什么事模块化,具体如何模块化构架我们的项目,推荐阅读 JavaScript 模块化入门Ⅰ:理解模块 和 JavaScript 模块化入门Ⅱ:模块打包构建。
当项目代码多了,我们的模块文件越来越多,就需要工具来帮助我们更好的管理和打包这些模块,让我们能更好的关注模块化开发,而不是这些琐碎的事情。于是 webpack 类似的工具就应运而生,当然除了 webpack 还有很多类似的工具,他们各有各的优点,比如:rollup、parcel…。
今后文章所有的实例将用到 webpack 的 3.x 版本工具来结合Vue 完成开发工作。
初始 webpack
这里不得不说一下,很多朋友在开发 Vue 项目的时候,一上来就使用 vue-cli 脚手架工具开发项目,虽然可以很快的构建项目模板,不用关注初始化配置问题。但是我不建议这么做,因为一上来就是 vuejs + webpack + es6 + babel + eslint... 等各种工具,有人都还不知道他们是什么,就开始用。出了问题,就不知道如何是好。虽然借助搜索引擎可以帮助我们解决80%的难题,但还是需要花费大量的精力去搜索查询,不断的尝试,等问题解决了,一天就过去了,得不偿失啊。
所以我建议先从学会使用 webpack 开始,一步一步的引入进来,会容易接受一些。毕竟这世界上大多数人都不是天才,要学会跑,得先学会走路。
虽然当前社会比较浮躁,但是拥有一颗宁静的心,脚踏实地,才是成功之道啊~
好了废话不多说,直接进入今天的正题,使用 webpack 愉快的进行 Vuejs 项目开发。
在阅读下面代码之前,请提前熟悉 nodejs 模块的使用,包括基本的通过 npm 安装模块依赖和如何引入第三方模块使用,这里虽然会提到,但不会详细解释。
我们先新建一个项目文件夹,在根目录下新建 index.html,代码如下:
| 1 | <!DOCTYPE html> | 
命令行运行 npm init,按照交互提示,填写项目相关信息(当然都是英文,不懂得直接翻一下就明白了),填写完成后,项目根目录下会出现 package.json 文件(关于package.json文件内容具体介绍,可以阅读这篇文章:package.json文件)。然后通过 npm 安装我们需要的 vue 库:
| 1 | # 添加 --save 参数,会将 vue 依赖添加到 package.json 文件中 | 
然后新建一个 src 目录,在 src 目录下创建一个 app.js 入口文件,代码如下:
| 1 | // 模块化的引入 vue,并将其赋值给 Vue 变量 | 
当然 require 函数浏览器是无法识别的,这是就需要通过 webpack 帮我们实现编译打包工作,转化为主流浏览器可是别的 ES5 代码。
先安装 webpack 包依赖:
| 1 | # 添加 --save-dev 参数,会将 webpack 开发依赖添加到 package.json 文件中 | 
然后在项目根目录下创建 webpack.config.js 文件,代码如下:
| 1 | module.exports = { | 
因为上面的 index.html 中引入的是编译后的 build.js 文件,要看到开发效果,就需要手动运行 webpack 打包命令:
| 1 | ./node_modules/.bin/webpack | 
这里如果你想直接运行
webpack,那么就需要你的电脑全局安装 webpack,可以通过运行npm install webpack -g命令来全局安装。
然后你会看到输出以下结果:
| 1 | $ webpack | 
此时根目录下就会出现 build.js 文件,我们再通过浏览器打开 index.html 文件,熟悉的画面出现了,Hello Vue.js。
到这里一个简单的基于 vue + webpack 的项目就构建完成了,是不是很简单,迫不及待想自己动手试试呢?当然 webpack 的功能远不止如此更详细的功能,请阅读 官方文档,全面的了解下 webpack 的强大。
实时重新加载(live reloading)
上面的例子还有个问题,就是每次我们更新了代码,就需要重新进行打包编译,并手动刷新浏览器,才能看到我们更改的效果,实在是太麻烦了。webpack 作者也考虑到了这个问题,于是同时开发了 webpack-dev-server 工具,来帮助我们实现 live reloading 的功能,也就是当我们更新代码时,浏览器会实时刷新,呈现更新后的效果。
赶紧用起来~ 先安装下依赖:
| 1 | npm install webpack-dev-server --save-dev | 
然后修改 webpack.config.js 配置文件如下:
| 1 | module.exports = { | 
然后执行命令:
| 1 | ./node_modules/.bin/webpack-dev-server | 
控制台会输出一下内容:
| 1 | $ ./node_modules/.bin/webpack-dev-server | 
打开浏览器,访问: http://localhost:8080,此时我们熟悉的画面又出现了,O(∩_∩)O~~。我们再尝试修改 app.js 中 msg 内容,浏览器的内容也会跟着变化,是不是很酷,赶紧动手试试吧。
使用 npm 脚本
针对上面的打包命令 ./node_modules/.bin/webpack 和实时开发命令 ./node_modules/.bin/webpack-dev-server,虽然你可以很快的在命令行复制粘贴输入,但是第一次还是免不了动手输入。作为一个懒惰的程序员,怎么能接受敲击这么多多余的字符呢?正好package.json 文件中 scripts 字段就可以帮助我们解决这个烦恼。
先来看下介绍:
scripts 是用来指定运行脚本命令的npm命令行缩写的,比如 start 指定了运行
npm run start时,所要执行的相关命令。
好的,既然明白了它的作用,我们就来尝试改写 package.json 文件,修改 scripts 字段为如下内容:
| 1 | "scripts": { | 
然后,在命令行输入:
| 1 | npm run dev | 
你会发现跟执行 ./node_modules/.bin/webpack-dev-server 是一样的效果。
注意:这里在
scripts中指定webpack-dev-server命令是,省去了命令路径,这是因为,npm 在执行脚本时,会默认优先执行当前目录下./node_modules/.bin/中的命令,如果找不到该命令,则会执行全局命令。
同理,执行 npm run build 就是打包输出我们想要的 build.js 文件。
CSS预处理器
虽然 css 已经足够强大,但是在程序员眼里,它一直是个很麻烦的东西,它没有变量,也没有条件语句,只是单纯的一行行的描述,写起来相当麻烦。于是各种 CSS预处理器 应运而生,其中我最喜欢的是 SASS,使用 sass 语法编写我们的样式文件,会大大提高我们的开发效率,使得 css 工程化变得容易了很多。
接下来介绍下,如何集成到我们的项目中。
对于 webpack 来说 一切皆模块,所有的文件通过模块引入的方式形成依赖关系,而对于每个模块的引入或预处理,都是通过 loader 来实现了。因为我们的 sass 语法浏览器是无法识别的,所以在引入时需要使用相关 loader 对其进项预处理,转化为相应的 css。虽然 css 浏览器可以识别的,但是 webpack 本质上是一个 javascript 应用程序的静态模块打包器,一切文件内容都将处理为 javascript,然后进行后期的处理。所以这里除了需要预处理 sass 的 loader,还需要加载 css 的 loader,最后还需要通过 style-loader 来转化为通过 js 的方式动态创建 style 标签到 index.html 中。
知道了这点,我们就知道要怎么做了,首先安装所需的 loader:
| 1 | # 因为 `sass-loader` 需要依赖 `node-sass`, 所以这里一并安装 | 
修改 webpack.config.js 配置文件,添加相关 loader 配置:
| 1 | module.exports = { | 
webpack 的 loader 是支持链式传递的,它能够对资源使用流水线(pipline)式处理,一组链式的 loader 将按照相反顺序依次处理,这里的处理流程就是:
sass-loader -> css-loader => style-loader
配置好了,我们现在来测试下,在 src 目录下创建一个 app.scss 文件,内容如下:
| 1 | $red: rgb(218, 42, 42);
h1 { | 
然后在 src/app.js 文件中引入:
| 1 | require('./app.scss');
var Vue = require('vue');
new Vue({ | 
此时再运行 npm run dev,你会发现我们的 h1 标签颜色变了。通过审核元素,可以发现 index.html 的 head 标签中新增了一个 style 标签,内容就是,app.scss 编译输出的内容:
| 1 | h1 { | 
如果还不清楚 sass 用法的,建议去看看这篇基础介绍文档:SASS用法指南
图片加载
既然说到了 css 静态资源,自然免不了对于图片的加载了。上文说过,在 webpack 中,一切皆模块,图片当然也是以模块的方式引入的。既然是模块,自然少不了相关引入的 loader,这里图片引入我们使用到的是 url-loader,先安装下:
| 1 | npm install url-loader --save-dev | 
添加 url-loader 配置:
| 1 | module.exports = { | 
然后再 app.js 中引入:
| 1 | require('./app.scss');
var Vue = require('vue'); | 
这里我们用
render函数来自定义渲染我们的节点,它含有默认参数h就是我们 花式渲染目标元素 讲到的createElement参数的别名而已,这里为了书写简单。h函数的第一个参数为dom名称,第二个参数为创建时配置对象,通过domProps来添加 DOM 相关的属性值。这里将我们引入的logoSrc赋值给它的src属性。
然后再重新运行 npm run dev,页面中就出现了我们想要的 logo 图片了。
总结
知己知彼,百战不殆,我们只有真正了解了 webpack 的使用技巧,在实际开发中,我们才会更加的得心应手。不至于被一个莫名其妙的错误个吓到。程序员有三宝:多学习,多编写,多总结,我们的编程技巧才能才会不断提高。
Vuejs - 工欲善其事必先利其器的更多相关文章
- 转:【工欲善其事必先利其器】—Entity Framework实例详解
		开始本篇文章之前,先说一下Entity Framework 6 Alpha1在NuGet中已可用,原文链接http://blogs.msdn.com/b/adonet/archive/2012/10/ ... 
- 单片机开发——02工欲善其事必先利其器(Proteus软件安装破解)
		在单片机开发工程中,博主经常通过模拟软件Proteus进行模拟仿真,将编译生成的"HEX"文件下载在单片机芯片中,然后进行后期的debug工作,当模拟仿真完成之后,进行硬件测试部分 ... 
- 单片机开发——01工欲善其事必先利其器(Keil软件安装破解)
		本文是博主<单片机开发>博客第一篇文章,主要讲述51单片机编程软件Keil uVision4的安装及破解过程. 1. Keil uVision4安装包文件 PATH:链接 ... 
- 工欲善其事必先利其器--------搭建Android平台
		工欲善其事必先利其器--------搭建Android平台 1.1 安装JDK 在Eclipse的开发过程中需要JDK或JRE的支持,否则会报错. (1) 下载JDK(建 ... 
- 古语云:工欲善其事必先利其器 --> 最新、最全的 IntelliJ IDEA(2018.3.3)  的介绍、安装、破解、配置与使用
		原文:古语云:工欲善其事必先利其器 --> 最新.最全的 IntelliJ IDEA(2018.3.3) 的介绍.安装.破解.配置与使用 一.IntelliJ IDEA 介绍 -> Ecl ... 
- java学习第一步-工欲善其事必先利其器
		Java SE 磨刀不误砍柴工,工欲善其事必先利其器,咱们先搞好硬件配置,才能顺利的搞好Java学习 阶段一 1.认识Java 2.java发展史及用户 3.配置Java环境 4.JDK8下载安装 5 ... 
- TIZ_c 第0周总结(2019/10/15-2019/10/22)工欲善其事必先利其器
		TIZ_c 第0周总结(2019/10/15-2019/10/22)工欲善其事必先利其器 任务清单 给自己取一个酷酷的id,并选择1-2个喜欢的方向.(只是初步选择,后期可更改) 改下群名片.例如yo ... 
- 工欲善其事,必先利其器-Python编辑器选择(2)
		前言:工欲善其事.必先利其器 一款顺手的好的编辑器可以让程序员写代码更得心应手,效率也会更高,但是编辑器本身没有好坏,只有使用者使用起来是否顺手而已,这里简单给大家介绍几款常用的可以编辑Python的 ... 
- 工欲善其事必先利其器——web调试工具firebug
		一.Firebug工具简介 firebug是firefox下的一款开发类插件.firebug集html查看和编辑,JavaScript控制台,网络状况监视器于一体,是开发JavaScript,css, ... 
随机推荐
- Swift-(OC中的enumerateObjectsUsingBlock跟Swift的enumerate区别)
			OC中使用: NSArray * lists = [NSArray array]; [lists enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUI ... 
- 【week2】四人小组项目(WBS、NABCD)
			项目选题:东北师范大学论坛 小组名称:nice! 项目组长:李权 组员:于淼 刘芳芳 杨柳 本周任务:要求给出需求概述.功能列表.痛点或亮点.NABCD及WBS模型在此项目中的应用. 作为东北师范大学 ... 
- BZOJ1926:[SDOI2010]粟粟的书架——题解
			http://www.lydsy.com/JudgeOnline/problem.php?id=1926 https://www.luogu.org/problemnew/show/P2468 幸福幼 ... 
- BZOJ2286:[SDOI2011]消耗战——题解
			+++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ... 
- 关于Javac编译器的那点事(一)
			Javac是什么? 它是一种编译器,将Java对人非常友好的语言,编译转化对所有机器都非常友好的语言,即:JVM能够识别的语言,也就是Java字节码.而Java字节码,说白了就是一连串二进制数字. J ... 
- pandas模块(数据分析)------Series
			pandas是一个强大的Python数据分析的工具包. pandas是基于NumPy构建的. pandas的主要功能: 具备对其功能的数据结构DataFrame.Series 集成时间序列功能 提供丰 ... 
- angularJS批量删除 品优购删除品牌(通用复选框批量选中删除解决思路)
			思路: 一步:在点击复选框时维护变量数组 在js中定义一个数组变量, 给复选框添加点击动作, 在动作中判断当前复选框是否为选中状态(即点击后复选框的是否选中状态), 若为选中状态,则向数组中添加选中的 ... 
- JS传递中文参数出现乱码的解决办法
			一.window.open() 乱码: JS中使用window.open("url?param="+paramvalue)传递参数出现乱码,提交的时候,客户端浏览器URL中显示参数 ... 
- 如何设置Eclipse使用JDK
			1.打开Eclipse,选择Windows->Preferences,如图所示: 2.配置本地安装的jdk,如图所示: 注意:首先要先安装JDK. 木头大哥所发的文章均基于自身实践, ... 
- 文件上传文件的权限--lnmp 环境配置,尤其整个项目复制过来动~~~
			site_upload 需要是自己才建立动才会是root root 所有者:---不是root : root 上传不了文件,不是 777 就都可以上传的,也要看看是谁建立的文件夹: 打包 ... 
